Рациональные числа модуль fractions python

Модуль Fraction в Python: примеры создания дробей

Модуль Fraction в Python используется для работы с арифметикой рациональных чисел. Этот модуль позволяет нам создавать дробные экземпляры целых чисел, чисел с плавающей запятой, десятичных чисел и строк.

Что такое дробный экземпляр?

Дробные экземпляры могут быть созданы с использованием пары целых чисел, строки или другого рационального числа. Они являются хешируемыми и должны рассматриваться как изменяемые.

Как создать дробь?

Модуль Fraction в Python предоставляет следующие встроенные функции, которые используются для создания дроби. Давайте разберемся в следующих способах создания дроби.

  • class fractions.Function(numerator = 0, denominator = 1): – Этот метод по умолчанию присваивает числителю значение 0 и знаменателю 1. Если знаменатель равен 0, это вызовет ошибку Zerodivision. Давайте разберемся в следующем примере.
from fractions import Fraction print(Fraction(10, 37)) # returns Fraction(11, 35) print(Fraction(11, 18)) # returns Fraction(5, 9) print(Fraction()) # returns Fraction(0, 1)
  • class fractions.Fraction(other_fraction): этот метод принимает экземпляр other_fraction числа. Он возвращает рациональные и дробные экземпляры с одинаковым значением.
  • class fractions.Fraction(float): – этот метод принимает значение с плавающей запятой и возвращает тот же экземпляр значения дроби.
from fractions import Fraction print(Fraction(1/12))
6004799503160661/72057594037927936
  • class fractions.Fraction(decimal): этот метод принимает десятичный экземпляр и возвращает экземпляр с тем же значением. Давайте разберемся в следующем примере.
from fractions import Fraction print(Fraction('2.26'))
  • class fractions.Fraction(string): этот метод принимает строку или Unicode в качестве аргумента и возвращает экземпляр с тем же значением.
from fractions import Fraction print(Fraction('7/25')) print(Fraction('1.23')) print(Fraction('3/5')) print(Fraction('1.414213 \t\n'))
7/25 123/100 3/5 1414213/1000000
  • limit_denominator(max_denominator = 1000000) – используется для нахождения приближения к заданному числу с плавающей запятой. Возвращает заданную дробь self, знаменатель которой равен max_denominator. Разберем в следующих примерах.
from fractions import Fraction print(Fraction('3.14159265358979323846')) print(Fraction('3.14159265358979323846').limit_denominator(10000)) print(Fraction('3.14159265358979323846').limit_denominator(100)) print(Fraction('3.14159265358979323846').limit_denominator(10)) print(Fraction(125, 50).numerator) print(Fraction(125, 50).denominator)
157079632679489661923/50000000000000000000 355/113 311/99 22/7 5 2

Пример – 2: Выполнение математической операции с дробным числом.

from fractions import Fraction print(Fraction(56, 12) + Fraction(18, 25)) print(Fraction(5, 2) / Fraction(12, 10)) print(Fraction(16, 15) * Fraction(26, 39)) print(Fraction(18, 5) * Fraction(15, 36)) print(Fraction(22, 5) ** Fraction(6, 10))
404/75 25/12 32/45 3/2 2.4326050606703427

Заключение

В этом руководстве мы обсудили модуль Fraction и несколько его важных методов. Эти методы можно использовать в проектах сложных математических вычислений и машинного обучения.

Читайте также:  Hello World

Источник

fractions — Rational numbers¶

The fractions module provides support for rational number arithmetic.

A Fraction instance can be constructed from a pair of integers, from another rational number, or from a string.

class fractions. Fraction ( numerator = 0 , denominator = 1 ) ¶ class fractions. Fraction ( other_fraction ) class fractions. Fraction ( float ) class fractions. Fraction ( decimal ) class fractions. Fraction ( string )

The first version requires that numerator and denominator are instances of numbers.Rational and returns a new Fraction instance with value numerator/denominator . If denominator is 0 , it raises a ZeroDivisionError . The second version requires that other_fraction is an instance of numbers.Rational and returns a Fraction instance with the same value. The next two versions accept either a float or a decimal.Decimal instance, and return a Fraction instance with exactly the same value. Note that due to the usual issues with binary floating-point (see Floating Point Arithmetic: Issues and Limitations ), the argument to Fraction(1.1) is not exactly equal to 11/10, and so Fraction(1.1) does not return Fraction(11, 10) as one might expect. (But see the documentation for the limit_denominator() method below.) The last version of the constructor expects a string or unicode instance. The usual form for this instance is:

[sign] numerator ['/' denominator] 

where the optional sign may be either ‘+’ or ‘-’ and numerator and denominator (if present) are strings of decimal digits (underscores may be used to delimit digits as with integral literals in code). In addition, any string that represents a finite value and is accepted by the float constructor is also accepted by the Fraction constructor. In either form the input string may also have leading and/or trailing whitespace. Here are some examples:

>>> from fractions import Fraction >>> Fraction(16, -10) Fraction(-8, 5) >>> Fraction(123) Fraction(123, 1) >>> Fraction() Fraction(0, 1) >>> Fraction('3/7') Fraction(3, 7) >>> Fraction(' -3/7 ') Fraction(-3, 7) >>> Fraction('1.414213 \t\n') Fraction(1414213, 1000000) >>> Fraction('-.125') Fraction(-1, 8) >>> Fraction('7e-6') Fraction(7, 1000000) >>> Fraction(2.25) Fraction(9, 4) >>> Fraction(1.1) Fraction(2476979795053773, 2251799813685248) >>> from decimal import Decimal >>> Fraction(Decimal('1.1')) Fraction(11, 10) 

The Fraction class inherits from the abstract base class numbers.Rational , and implements all of the methods and operations from that class. Fraction instances are hashable , and should be treated as immutable. In addition, Fraction has the following properties and methods:

Changed in version 3.2: The Fraction constructor now accepts float and decimal.Decimal instances.

Changed in version 3.9: The math.gcd() function is now used to normalize the numerator and denominator. math.gcd() always return a int type. Previously, the GCD type depended on numerator and denominator.

Changed in version 3.11: Underscores are now permitted when creating a Fraction instance from a string, following PEP 515 rules.

Changed in version 3.11: Fraction implements __int__ now to satisfy typing.SupportsInt instance checks.

Numerator of the Fraction in lowest term.

Denominator of the Fraction in lowest term.

Return a tuple of two integers, whose ratio is equal to the Fraction and with a positive denominator.

Alternative constructor which only accepts instances of float or numbers.Integral . Beware that Fraction.from_float(0.3) is not the same value as Fraction(3, 10) .

From Python 3.2 onwards, you can also construct a Fraction instance directly from a float .

Alternative constructor which only accepts instances of decimal.Decimal or numbers.Integral .

From Python 3.2 onwards, you can also construct a Fraction instance directly from a decimal.Decimal instance.

Finds and returns the closest Fraction to self that has denominator at most max_denominator. This method is useful for finding rational approximations to a given floating-point number:

>>> from fractions import Fraction >>> Fraction('3.1415926535897932').limit_denominator(1000) Fraction(355, 113) 

or for recovering a rational number that’s represented as a float:

>>> from math import pi, cos >>> Fraction(cos(pi/3)) Fraction(4503599627370497, 9007199254740992) >>> Fraction(cos(pi/3)).limit_denominator() Fraction(1, 2) >>> Fraction(1.1).limit_denominator() Fraction(11, 10) 
>>> from math import floor >>> floor(Fraction(355, 113)) 3 

Returns the least int >= self . This method can also be accessed through the math.ceil() function.

__round__ ( ) ¶ __round__ ( ndigits )

The first version returns the nearest int to self , rounding half to even. The second version rounds self to the nearest multiple of Fraction(1, 10**ndigits) (logically, if ndigits is negative), again rounding half toward even. This method can also be accessed through the round() function.

The abstract base classes making up the numeric tower.

Источник

fractions — Рациональные числа¶

Модуль fractions реализует поддержку арифметики рациональных чисел.

Экземпляр Fraction может создаваться из пары целых чисел, из другого рационального числа или из строки.

class fractions. Fraction ( numerator=0, denominator=1 ) ¶ class fractions. Fraction ( other_fraction ) class fractions. Fraction ( float ) class fractions. Fraction ( decimal ) class fractions. Fraction ( string )

Первая версия требует, чтобы numerator и denominator были экземплярами numbers.Rational , и возвращала новый экземпляр Fraction со значением numerator/denominator . Если denominator равен 0 , возникает ZeroDivisionError . Вторая версия требует, чтобы other_fraction был экземпляром numbers.Rational и возвращал экземпляр Fraction с тем же значением. Следующие две версии принимают экземпляр float или decimal.Decimal и возвращают экземпляр Fraction с точно таким же значением. Обратите внимание, что из-за обычных проблем с двоичными числами с плавающей запятой (см. Арифметика с плавающей запятой: проблемы и ограничения ) аргумент Fraction(1.1) не совсем равен 11/10, поэтому Fraction(1.1) не возвращает Fraction(11, 10) , как и можно было ожидать. (Но см. документацию для метода limit_denominator() ниже.) Последняя версия конструктора ожидает строку или Юникод экземпляр. Обычная форма для этого случая:

[sign] numerator ['/' denominator] 

где необязательный sign может быть либо «+», либо «-», а numerator и denominator (если присутствуют) являются строками десятичных цифр. Кроме того, любая строка, представляющая конечное значение и принимаемая конструктором float , также принимается конструктором Fraction . В любой форме входная строка также может иметь начальные и/или конечные пробелы. Вот несколько примеров:

>>> from fractions import Fraction >>> Fraction(16, -10) Fraction(-8, 5) >>> Fraction(123) Fraction(123, 1) >>> Fraction() Fraction(0, 1) >>> Fraction('3/7') Fraction(3, 7) >>> Fraction(' -3/7 ') Fraction(-3, 7) >>> Fraction('1.414213 \t\n') Fraction(1414213, 1000000) >>> Fraction('-.125') Fraction(-1, 8) >>> Fraction('7e-6') Fraction(7, 1000000) >>> Fraction(2.25) Fraction(9, 4) >>> Fraction(1.1) Fraction(2476979795053773, 2251799813685248) >>> from decimal import Decimal >>> Fraction(Decimal('1.1')) Fraction(11, 10) 

Класс Fraction наследуется от абстрактного базового класса numbers.Rational и реализует все методы и операции данного класса. Экземпляры Fraction можно хэшировать, и их следует рассматривать как неизменяемые. Кроме того, Fraction обладает следующими свойствами и методами:

Изменено в версии 3.2: Конструктор Fraction теперь принимает экземпляры float и decimal.Decimal .

Знаменатель дроби в наименьшем члене.

Возвращает кортеж из двух целых чисел, отношение которых равно дроби и имеет положительный знаменатель.

Данный метод класса создаёт Fraction , представляющий точное значение flt, которое должно быть float . Имейте в виду, что Fraction.from_float(0.3) не совпадает со значением Fraction(3, 10) .

Начиная с Python 3.2, вы также можете создать экземпляр Fraction непосредственно из float .

Данный метод класса создаёт Fraction , представляющий точное значение dec, которое должно быть экземпляром decimal.Decimal .

Начиная с Python 3.2, вы также можете создать экземпляр Fraction непосредственно из экземпляра decimal.Decimal .

Находит и возвращает ближайший Fraction к self , знаменатель которого не превышает max_denominator. Данный метод полезен для поиска рациональных приближений к заданному числу с плавающей запятой:

>>> from fractions import Fraction >>> Fraction('3.1415926535897932').limit_denominator(1000) Fraction(355, 113) 

или для восстановления рационального числа, представленного в виде числа с плавающей запятой:

>>> from math import pi, cos >>> Fraction(cos(pi/3)) Fraction(4503599627370497, 9007199254740992) >>> Fraction(cos(pi/3)).limit_denominator() Fraction(1, 2) >>> Fraction(1.1).limit_denominator() Fraction(11, 10) 
>>> from math import floor >>> floor(Fraction(355, 113)) 3 

Возвращает наименьшее значение int >= self . К этому методу также можно получить доступ через функцию math.ceil() .

__round__ ( ) ¶ __round__ ( ndigits )

Первая версия возвращает ближайший int к self , округляя половину до четного. Вторая версия округляет self до ближайшего кратного Fraction(1, 10**ndigits) (логично, если ndigits отрицательно), снова округляя половину до четного. К этому методу также можно получить доступ через функцию round() .

Возвращает наибольший общий делитель целых чисел a и b. Если a или b отличны от нуля, то абсолютное значение gcd(a, b) является наибольшим целым числом, которое делится на a и b. gcd(a,b) имеет тот же знак, что и b, если b не равен нулю; в противном случае он принимает знак a. gcd(0, 0) возвращает 0 .

Не рекомендуется, начиная с версии 3.5: Вместо нее используйте math.gcd() .

Модуль numbers Абстрактные базовые классы, составляющие числовую башню.

Источник

Оцените статью