Страницы

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

понедельник, 25 февраля 2019 г.

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

В 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, но надеюсь есть решение проще.


Ответ

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

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

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