Доброго времени суток, читатели, зрители моего канала programmer's notes, любители языка Python. Не забывайте подписываться и писать свои
комментарии к моим статьям и видео.
Рациональные числа в Python. Модуль fractions
Интересная библиотека fractions. Предназначена для работы с рациональными числами, т.е. числами представленными числителем и знаменателем.
Примеры использования библиотеки fractions при работе с рациональными числами
И так, рациональное число может быть представлено в виде пары целых чисел a и b, имея в виду дробь a/b (см. программу ниже). Над рациональными числами можно производить все обычные арифметические операции. Кроме того переводить их в целые числа, в числа с плавающей точкой. Но можно производить преобразование в обратном направлении, т.е., например, из числа с плавающей точкой получить рациональное число.
Результат выполнения
3/4 0.75
25/28 0.8928571428571429
3/28 0.10714285714285714
21089/2500
3
И так, модуль fractions.Fraction используется для создания рационального числа. Этот же модуль может быть использован для преобразования числа float или int в в рациональное число. Обратите внимание, что при преобразовании числа float, оно берётся в кавычки. Тогда происходит точное преобразование этого числа в рациональное. Если кавычки не ставить, то может произойти потеря точности. Обращаем также внимание, что функция print() "понимает" рациональные аргументы.
Использование рациональных чисел может спасти точность вычисления. См. программу ниже
Результат выполнения
0.20000000000000007
1/5
Налицо сохранение точности при использовании fractions.
У класса Fraction, который мы использовали, есть также набор методов и свойств. В частности можно получить числитель (numerator) и знаменатель дроби (denominator). Имейте в виду, что библиотека при возможности автоматически сокращает дробь.
Результат выполнения
4
3
Т.е. произошло ещё и сокращение дроби.
Перечислим также методы класса fractions.Fraction.
- from_float() — метод преобразует число типа float и преобразует его к рациональной дроби.
- from_decimal() — преобразует к рациональной дроби число класса decimal.Decimal.
- limit_denominator(max_denominator=1000000) — метод возвращает ближайшее рациональное представление числа, знаменатель которого не превышает значение max_denominator.
- __floor__() — возвращает наибольшее целое число, которое меньше или равно данному рациональному.
- __ceil__() — возвращает наименьшее целое число, которое больше или равно данному рациональному числу.
- __round__(ndigits=None) — метод округления. Если ndigits=None то округление производится до ближайшего чётного числа. Если ndigits не равен None, то округление выполняется до ближайшего числа кратного Fraction(1, 10**ndigits), если последняя цифра 5, то округление будет производится к ближайшей чётной цифре. Если значение ndigits отрицательно, то округление выполняется до разряда на который указывает абсолютное значение ndigits. Если последняя цифра 5, то округление будет выполнено к ближайшей четной цифре.
Хорошего программирования. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.