1. Головна
  2. Колонка автора
  3. Типи даних в PHP: Числа з плаваючою крапкою (Float)

Типи даних в PHP: Числа з плаваючою крапкою (Float)

Числа з плаваючою крапкою (іноді називають "з плаваючою комою") описують той факт, що десяткова крапка числа може легко зміщуватись, або іншими словами – «плавати» (floating decimal point), – тобто її можна розмістити де завгодно відносно значущих цифр числа.

Якщо запис цілого число розташовується в пам’яті комп’ютера у вигляді послідовності цифр, то число з плаваючою крапкою представляється у вигляді двох частин: мантиси та порядку. Мантиса за абсолютною величиною завжди менша одиниці. Наприклад, число 125,5 можна записати у вигляді 0,1255×103. Тут 0,1255 - мантиса, а 3 - порядок числа.

У мові програмування PHP числа з плаваючою крапкою, також відомі як Float, Double або Real, можуть бути визначені наступним синтаксисом:
$a = 1.234; 
$b = 1.2e3;
$c = 7E-10;
Розмір числа з плаваючою крапкою залежить від платформи, хоча максимум, як правило складає ~ 1.8e308 з точністю близько 14 десяткових цифр (64-бітний IEEE формат).

Розрізняють дві форми запису дійсного числа: стандартну і експонентну. Експоненціальний запис крім мантиси (цілої і дробової частини) містить порядок, який починається з малої або великої літери Е і цілого додатного (чи від’ємного) числа. Так запис 1.2е-3 еквівалентний добутку 1.2x10-3 (або 0.0012). Дійсне число 1.1e+2 (або 1.1e2) еквівалентно 1.1x102 (або 110.0).

Дійсні числа перетворюються в комп’ютерне подання із втратами. Це пов’язано з тим, що деякі дроби в десятковій системі числення неможливо уявити кінцевим числом цифр. Так дріб 1/3 в десятковій формі приймає періодичну форму 0.33333333..., і частина цифр доводиться відкидати. Це призводить до того, що при операціях можуть накопичуватися помилки обчислення, наприклад, число 1.3 може приймати форму 1.29999999... Таку поведінку дійсних чисел слід враховувати в програмах, особливо при порівнянні їх один з одним.

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

Крім того, дійсні числа, які можуть бути точно представлені у вигляді чисел з плаваючою крапкою з основою 10, наприклад, 0.1 або 0.7, не мають точного внутрішнього уявлення як чисел з плаваючою крапкою з основою 2, незалежно від розміру мантиси. Тому вони і не можуть бути перетворені в їх внутрішню двійкову форму без невеликої втрати точності. Це може призвести до несподіваних результатів.

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

Перетворення рядків у числа з плаваючою точкою відбувається так: якщо рядок починається з числового значення, буде використано це значення. Інакше значенням буде 0 (нуль). Для значень інших типів перетворення буде спочатку здійснено в Integer і потім в число з плаваючою крапкою.

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

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

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

#ТипиданихPHP
Редакція «КовельPost» може не поділяти думку блогерів або дописувачів. За зміст публікацій і їх достовірність відповідальність несуть автори.

Коментарі

Читайте також