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

 


Зв’язані теми