Максимальне використання чисел за допомогою десяткових знаків

Одним із найбільш часто використовуваних типів даних у Python є float, який представляє числа з плаваючою комою. Числа з плаваючою комою – це числа, позитивні чи негативні, які мають десятковий знак. Числа з плаваючою точкою також включають числа, представлені за допомогою наукової нотації, з символом e або E, який використовується для позначення ступеня 10.

Float є дуже важливим типом даних, оскільки він може представляти широкий діапазон дійсних чисел, від дуже маленьких до дуже великих чисел.

Приклади чисел з плаваючою комою в Python наведено нижче:

# float numbers
a = 20.0
b = -51.51345
c = 65e7
d = -1.08E12
e = 2E10

print(type(a))
print(type(b))
print(type(c))
print(type(d))
print(type(e))

Вихід:

<class 'float'>
<class 'float'>
<class 'float'>
<class 'float'>
<class 'float'>

Крім того, вони дозволяють виконувати більш точні обчислення порівняно з такими типами даних, як цілі числа, які видаляють дробову частину чисел. Наприклад, для цілих чисел таке число, як 3,142, буде представлено просто як 3.

Однак тип даних float представлятиме фактичне число, яке є 3,142. Тому плаваючі значення краще підходять для математичних розрахунків, оскільки вони дають більш точні результати.

У зв’язку з цим значення з плаваючою комою широко використовуються в моделюванні реального світу, машинному навчанні, науці про дані, фінансовому та економічному аналізі, математичних обчисленнях, графіках і візуалізаціях, а також у наукових та інженерних розрахунках.

Цілі числа проти Float у Python

Цілі числа є ще одним дуже популярним типом даних у Python. На відміну від чисел з плаваючою комою, цілі числа не мають десяткової коми. Цілі числа складаються з додатних цілих чисел, від’ємних чисел і нуля, усі з яких не мають дробової частини.

Цілі числа корисні, коли ми виконуємо операції з цілими числами, наприклад під час підрахунку чи індексування. У Python цілі значення позначаються як int.

Деякі цілі числа показані нижче:

a = 0
b = 968
c = -14

print(type(a))
print(type(b))
print(type(c))

Вихід:

<class 'int'>
<class 'int'>
<class 'int'>

Деякі відмінності між цілими числами та числами з плаваючою комою в Python включають:

CharacteristicIntegers(int)Числа з плаваючою комою(float)Репрезентують цілі числа, їхні від’ємні відповідники та нуль, усі без десяткового знака. Реальні числа з десятковою комою.PrecisionНеобмежена точність, тому немає обмежень на те, наскільки довгим або великим може бути значення int. Єдиним обмеженням буде доступна пам’ять у вашій системі. Обмежте точність. Найбільше значення з плаваючою речовиною, яке ви можете зберегти, становить приблизно 1,8 x 10308. Використання пам’яті. Використовує менше пам’яті, що плаває. Використовує більше пам’яті, ніж цілі значення. Побітові операції. Широко використовуються в побітових операціях. Майже ніколи не використовуються в побітових операціях. Використання. Зазвичай використовуються для підрахунку, індексування та побітових операцій. Широко використовуються у вимірюваннях, наукових обчисленнях і більшість математичних операцій

  Як автоматично зупинити загоряння Apple Watch

Різні способи створення та використання плаваючих елементів у Python

Простий спосіб почати працювати зі значеннями з плаваючою точкою в Python — це призначити змінній значення з плаваючою точкою так:

# assign a variable a float value
a = 3.142

Інший спосіб отримати значення з плаваючою точкою — це перетворити цілі числа та числові рядки в значення з плаваючою точкою за допомогою конструктора float(). Якщо ми передаємо цілий чи числовий рядок у float(), його буде перетворено на значення з плаваючою точкою, як показано нижче:

number1 = 2524
numString1 = "513.523"
numString2 = "1341"
# Convert to a float and store the float value in a variable
a = float(number1)
print(a)
b = float(numString1);
print(b)
c = float(numString2)
print(c)

Вихід:

2524.0
513.523
1341.0

У наведеному вище прикладі ціле число та рядки перетворюються на значення з плаваючою речовиною за допомогою float(), а потім зберігаються у змінній, яка потім роздруковується, показуючи результуюче значення з плаваючою речовиною після перетворення.

Інший спосіб отримати значення з плаваючою точкою — виконати математичні обчислення, наприклад ділення, як показано нижче:

num1 = 20
num2 = 3
result = num1/num2
print("Result of the division as an integer:")
print(int(20/3))
print("Result of the division as a float value:")
print(result)
print(type(result))

Вихід:

Result of the division as an integer:
6
Result of the division as a float value:
6.666666666666667
<class 'float'>

У наведеному вище прикладі зауважте, що значення з плаваючою точкою дає точнішу відповідь порівняно з діленням і отриманням результату як цілого числа.

Працюючи з числами з плаваючою точкою в Python, ви можете отримати дуже цікаві результати через те, як значення з плаваючою точкою представлені всередині комп’ютера. Числа з плаваючою комою представлені в апаратному забезпеченні комп’ютера як дроби з основою 2 (двійкові).

Однак більшість десяткових дробів, особливо з повторюваними десятковими дробами, не можна представити у вигляді точного двійкового дробу. У результаті числа з плаваючою комою зазвичай зберігаються як наближення фактичного значення.

Щоб побачити це практично, розглянемо значення float 0,3. Якщо ви присвоїте 0,3 змінній внутрішньо, вона не буде зберігатися як саме 0,3. Щоб побачити це, ми можемо використати функцію format(), щоб побачити, як 0.3 представлено всередині. format() дозволяє нам відобразити бажану кількість значущих цифр значення, з яким ми працюємо. У наведеному нижче прикладі ми друкуємо від 0,3 до 20 значущих цифр, щоб побачити, як вони зберігаються всередині.

num = 0.3
print("num to 20 significant figures")
print(format(num, '.20f'))
print("Value we stored for num")
print(num)

Вихід:

num to 20 significant figures
0.29999999999999998890
Value we stored for num
0.3

Як бачите, значення 0,3, яке ми присвоїли змінній під назвою num, не зберігається усередині як саме 0,3. Коли ви друкуєте змінну num, ви отримуєте округлене значення.

  11 найкращих книг з науки про дані для вивчення від теорії до практичного застосування [2023 Edition]

Через це ви можете отримати деякі несподівані результати під час роботи з плаваючими значеннями. Наприклад, якщо вам потрібно вручну обчислити 0,3 + 0,3 + 0,3, ваша відповідь буде 0,9. Однак, згідно з Python, це не так, тому що всередині він зберігає двійкові дробові наближення фактичного значення. Це можна побачити нижче:

sum = 0.3 + 0.3 + 0.3
answer = 0.9
print("Is sum equal to answer: ")
print(sum == answer)
print("The internal representation of of sum is: ")
print(sum)
print("The answer from manual calculation is: ")
print(answer)

Вихід:

Is sum equal to answer: 
False
The internal representation of of sum is: 
0.8999999999999999
The answer from manual calculation is: 
0.9

Тому, працюючи з плаваючими значеннями, важливо мати на увазі, що Python не зберігає точні значення всередині. Натомість він зберігає наближені фактичні значення.

Тому, роблячи порівняння між значеннями з плаваючою точкою, ви можете спочатку округлити до однакової кількості значущих цифр. Для більшої точності під час роботи з числами з плаваючою комою в Python розгляньте можливість використання вбудованого десяткового модуля.

Десятковий модуль у Python

У ситуаціях, коли висока точність важлива і обов’язкова, наприклад у фінансових і наукових розрахунках, використання float не є ідеальним. Щоб гарантувати високу точність при роботі з числами з плаваючою комою, використовується вбудований десятичний модуль Python.

На відміну від float, який зберігається як двійкове представлення з плаваючою комою, що залежить від машини, десятковий модуль зберігає числа з плаваючою комою, використовуючи машинно-незалежне десяткове представлення, яке забезпечує вищу точність.

Крім того, десятковий модуль може представляти десяткові числа точно такими, якими вони є, і використовувати їх у обчисленнях саме такими, якими вони є. Він також пропонує правильно округлену десяткову арифметику з плаваючою комою.

Щоб почати використовувати десятковий модуль, імпортуйте його у свій файл Python таким чином:

import decimal

Щоб побачити переваги десяткового модуля, повторимо попередній порівняльний результат між сумою 0,3 + 0,3 + 0,3 і значенням 0,9. Код для цього показано нижче:

import decimal

sum = decimal.Decimal('0.3') + decimal.Decimal('0.3') + decimal.Decimal('0.3')
answer = decimal.Decimal('0.9')
print("Is sum equal to answer: ")
print(sum == answer)
print("The internal representation of sum is: ")
print(sum)
print("The answer from manual calculation is: ")
print(answer)

Вихід:

Is sum equal to answer: 
True
The internal representation of sum is: 
0.9
The answer from manual calculation is: 
0.9

Тому, коли ви працюєте з числами з плаваючою точкою і потребуєте високої точності, пам’ятайте, що завжди потрібно використовувати десятковий модуль.

  Як захиститися від зловмисної пошукової реклами

Поширені помилки при роботі з плаваючими елементами

Багато помилок, які виникають під час роботи з Float у Python, виникають через нерозуміння того, як числа з плаваючою точкою представлені всередині Python. Наприклад, таке значення, як 0,3, не буде збережено точно як 0,3. Таким чином, ви, швидше за все, зіткнетеся з помилками, якщо обробляєте значення з плаваючою речовиною, припускаючи, що вони зберігаються точно так, як є.

Однією з поширених помилок є помилка округлення, з якою ви зіткнетеся під час виконання математичних обчислень із значеннями з плаваючою точкою. Оскільки Python не може представити фактичні значення з плаваючою точкою, ви, ймовірно, зіткнетеся з помилками округлення, коли результати можуть бути не такими, як ви очікуєте.

Через такі помилки, як помилки округлення, ви, імовірно, зіткнетеся з помилками, коли спробуєте порівняти значення рівності між значеннями з плаваючою комою. Будьте дуже обережні, працюючи з плаваючими значеннями в Python, і будьте в курсі несподіваних результатів.

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

Висновок

Як програміст, що працює з Python, ви зобов’язані використовувати тип даних float. Щоб уникнути помилок із цим типом даних, важливо розуміти, як Python внутрішньо представляє числа з плаваючою точкою. Оскільки Python не може зберігати фактичні числа з плаваючою точкою, уникайте точного порівняння рівності зі значеннями з плаваючою точкою. Інакше ви зіткнетеся з помилками.

Якщо вам потрібні точні результати у вашій програмі, уникайте використання плаваючих значень. Замість цього використовуйте вбудований десятковий модуль, який дає точні результати чисел з плаваючою комою та представляє їх точно такими, якими вони є, у машинно-незалежний спосіб.

Ви також можете прочитати функції Python Itertools і Python Try Except.