Python. Рациональные числа. Класс Fraction

Рациональные числа. Класс Fraction


Содержание


1. Понятие рационального числа. Представление рациональных чисел. Класс Fraction

Рациональное число – это число, которое можно представить в виде рациональной дроби m/n, где m, n соответственно числитель и знаменатель которые имеют целочисленное значение. Например, в дроби 5/6 значение m = 5, значение n = 6.

В языке программирования Python для работы с рациональными числами предлагается класс Fraction. В классе соответствующим образом представлены числитель m и знаменатель n. В классе Fraction автоматически осуществляется упрощение дроби (например, 9/18 => 1/2).

Чтобы использовать возможности класса Fraction нужно предварительно подключить модуль fractions

from fractions import Fraction

 

2. Создание объекта класса Fraction

Объект класса Fraction можно создать одним из двух способов.

Способ 1. С помощью конструктора, который содержит целочисленные значения числителя и знаменателя.

Пример.

a = Fraction(5, 6) # a = 5/6 - рациональное число
b = Fraction(8, 12) # b = 2/3 - рациональное число

В вышеприведенном примере в строке

b = Fraction(8, 12)

значение числителя 8 и знаменателя 12 переменной b будет автоматически упрощено к виду 2/3. То есть, числитель в классе равен 2, знаменатель равен 3.

Способ 2. С помощью конструктора, который получает строку с вещественным значением.

Пример.

a = Fraction('1.33') # a = 133/100
b = Fraction('3.719') # b = 3719/1000
c = Fraction('-1.5') # c = -3/2
d = Fraction('3.7') + Fraction('5.2') # d = 89/10

 

3. Операции над рациональными числами. Примеры

Над объектами класса Fraction можно выполнять следующие арифметические операции:

  • сложение (+);
  • вычитание ();
  • умножение (*);
  • деление (/)
  • взятие остатка от деления (%).

Примеры.

# Рациональные числа
from fractions import Fraction

a = Fraction(5, 6) + Fraction(3, 2) # a =   7/3
b = a - Fraction(3, 5) # b = 26/15
c = b * Fraction(101, 202) # c = 13/15
d = c / b # d = 1/2
e = d % a # e = 1/2

Операция возведения в степень числа типа Fraction возвращает вещественный результат

f = Fraction(1,2)**Fraction(1,2) # f = 0.7071067811865476


 

4. Преимущества применения рациональных чисел. Пример

Как известно, операции с вещественными числами имеют ограничение точности, которая зависит от возможностей аппаратных средств реализующих математику вещественных чисел. По сравнению с вещественными числами рациональные числа обеспечивают

  • нужную точность вычислений;
  • автоматическое упрощение результата.

Пример. В примере демонстрируется потеря точности для выражения 0.2+0.2+0.2-0.4.

# Рациональные числа, преимущества применения
from fractions import Fraction

a = 0.2+0.2+0.2-0.4 # a =   0.20000000000000007 - точность теряется
b = Fraction('0.2')+Fraction('0.2')+Fraction('0.2')-Fraction('0.4') # b = 1/5
print('a = ', a)
print('b = ', b)

Результат работы программы

a = 0.20000000000000007
b = 1/5

 

5. Метод as_integer_ratio(). Пример

Метод as_integer_ratio() возвращает числитель и знаменатель, который соответствует заданному числу. Общая форма вызова метода

(real_number).as_integer_ratio()

где

  • real_number – число вещественного типа.

Метод используется для поддержки преобразования в рациональные числа.



Пример.

# метод as_integer_ratio
from fractions import Fraction

# преобразование в дробное число
a = (3.5).as_integer_ratio() # a = (7, 2)
b = (11.7).as_integer_ratio() # b = (3293257227514675, 281474976710656)

# преобразование в тип Fraction
a = 8.5
c = Fraction(*a.as_integer_ratio()) # c =   17/2

В вышеприведенном примере символ * означает синтаксис распаковывания кортежа на отдельные аргументы.

 

6. Метод Fraction.from_float(). Пример

Метод from_float() класса Fraction позволяет получить числитель и знаменатель вещественного числа также как и метод as_integer_ratio().

Пример.

# метод from_float класса Fraction
from fractions import Fraction

y = Fraction.from_float(2.25) # y = 9/4

x = 3.8 # тип float
y = Fraction.from_float(x) # y = 4278419646001971/1125899906842624

x = -8.75
y = Fraction.from_float(x) # y = -35/4

 

7. Метод float(). Пример

Метод float() может получать объекты типа Fraction в качестве аргументов. Метод возвращает число типа float.

Пример.

# метод float() класса Fraction
from fractions import Fraction

# аргумент - переменная вещественного типа
x = Fraction(11, 4)
y = float(x) # y = 2.75

# аргумент - число
y = float(Fraction(7,6)) # y =   1.1666666666666667

 


Связанные темы