Числа з плаваючою точкою

Числа з плаваючою точкою або числа з плаваючою комою (відомі також як "float", "double" або "real") можна визначити наступними синтаксисами:

Loading...

Формально починаючи з PHP 7.4.0 (раніше підкреслення не дозволялося):

LNUM          [0-9]+(_[0-9]+)*
DNUM          ({LNUM}?"."{LNUM}) | ({LNUM}"."{LNUM}?)
EXPONENT_DNUM (({LNUM} | {DNUM}) [eE][+-]? {LNUM})

Розмір числа з плаваючою точкою залежить від платформи, хоча максимум зазвичай становить 1.8e308 з точністю близько 14 десяткових цифр (64-бітний формат IEEE).

Увага

Точність чисел з плаваючою точкою

Числа з плаваючою точкою мають обмежену точність. Хоча це залежить від операційної системи, PHP зазвичай використовується формат подвійної точності IEEE 754, що дає максимальну відносну помилку округлення порядку 1.11e-16. Неелементарні арифметичні операції можуть давати великі помилки, і, зрозуміло, необхідно брати до уваги поширення помилок під час спільного використання кількох операцій.

Крім того, раціональні числа, які можуть бути представлені у вигляді чисел з плаваючою точкою з основою 10, наприклад, 0.1или0.7, не мають точного внутрішнього подання як чисел з плаваючою точкою з основою 2, незалежно від розміру мантиси. Тому вони і не можуть бути перетворені на їхню внутрішню двійкову форму без невеликої втрати точності. Це може призвести до несподіваних результатів: наприклад, floor((0.1 + 0.7) * 10) швидше за все поверне 7 замість очікуваного 8, так как результат внутреннего представления будет чем-то вроде7.9999999999999991118...

Так що ніколи не довіряйте точності чисел з плаваючою точкою до останньої цифри і не перевіряйте прямо їхню рівність. Якщо вам дійсно потрібна висока точність, використовуйте математичні функції довільної точності і gmp-функції.

«Просте» пояснення можна знайти в »керівництві за числами з плаваючою точкою, яка також називається «Why don’t my numbers add up?» («Чому мої числа не складаються?» — англ.)

Перетворення на число з плаваючою точкою

З рядків

Якщо рядок містить число або провідну числову послідовність, тоді вона буде перетворена у відповідне значення з плаваючою точкою, в іншому випадку вона перетворюється на нуль (

З інших типів

Для значень інших типів перетворення виконується шляхом перетворення значення спочатку ціле число (int), а потім число з плаваючою точкою ( float ). Дивіться Перетворення на ціле число для отримання додаткової інформації.

Зауваження :

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

Порівняння чисел з плаваючою точкою

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

Для порівняння чисел з плаваючою точкою використовується верхня межа відносної помилки при заокругленні. Ця величина називається машинною епсілон або одиницею округлення (unit roundoff) і є найменшою допустимою різницею при розрахунках.

$a і $b дорівнюють 5 знакам після точки.

Loading...

NaN

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

Так как**NAN** є необмежену кількість різних значень, то NAN не слід порівнювати з іншими значеннями, включаючи її саму. Натомість, для визначення її наявності необхідно використовувати функцію is_nan()