Страницы

Поиск по вопросам

пятница, 10 января 2020 г.

Python и комплексный числа с рациональными действительной и мнимой частями

#python #python_3x #числа


В Python есть встроенный модуль поддерживающий точные вычисления с рациональными числами:

from fractions import Fraction
print(Fraction(2, 3) + Fraction(5, 7))


Все здорово, если учитывать, что питон по умолчанию использует длинную арифметику. 

Мне недавно понадобилось использовать комплексные числа только с рациональными мнимой
и действительной частями. Вот что из этого вышло:

>>> from fractions import Fraction
>>> print(Fraction(2, 3) + Fraction(5, 7) * 1j)
(0.6666666666666666+0.7142857142857143j)
>>> print(complex(Fraction(2, 3), Fraction(5, 7)))
(0.6666666666666666+0.7142857142857143j)


Fraction автоматически приводится к float. Как решить проблему?

В C++, например, можно было бы сделать следующим образом:

complex z(Fraction(2, 3), Fraction(5, 7));


Нельзя ли нечто подобное сделать в Python?

Я пока, что вижу только одно решение написать свой класс Complex, но надеюсь есть
решение проще.
    


Ответы

Ответ 1



Боюсь, что другого способа действительно нет. Единственное что, хорошим тоном будет наследоваться от абстрактного класса Complex https://docs.python.org/3.5/library/numbers.html. Это не даст упустить какие-то важные методы и в итоге позволит сделать класс с интерфейсом идентичным оригинальному.

Комментариев нет:

Отправить комментарий