Навчальні матеріали для 2 курсу

Особливості чисел з плаваючою точкою

Безліч значень, представлених у типах float, double і long double крім звичайних кінцевих значень містить три спеціальні значення NaN, -Inf, Inf.

Значення NaN

Значення NaN (Not-a-Number) використовується для того, щоб сигналізувати про те, що результат деякої операції не може бути обчислений через різного роду невизначеності.

Наприклад, операція 0.0/0.0 дасть результат NaN.

Насправді в речових типах представимо ціле сімейство значень NaN, додаткова інформація про конкретне значення NaN може бути використана як код помилки.

Всі функції перекладу з рядкового подання до речового значення, такі як *scanf, strtod і т. п. розпізнають рядок NAN (незалежно від регістра літер) і повертають значення NaN.

Усі функції переведення з речового значення в рядкове уявлення, такі як *printf, розпізнають значення NaN і виводять його у вигляді рядка nan.

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

Якщо один із операндів операції порівняння дорівнює NaN, операції порівняння дають наступний результат:

==0
!=1
0
>=0

Щоб перевірити речове значення на приналежність до класу NaN, можна використовувати функції fpclassify або isnan.

У силу властивостей значення NaN ми вважаємо, що послідовність чисел з плаваючою точкою може бути упорядкована, якщо у ній міститься елемент NaN

Значення -Inf, Inf

Ці значення являють результат "нескінченність" який може виникати при виконанняхрізних операцій з плаваючою точкою.

Наприклад, 1.0/0.0 дає результат Inf, а -1.0/0.0 дає результат -Inf.

Всі функції перекладу з рядкового подання до речового значення, такі як *scanf, strtod тощо розпізнають рядок [+-]INF (незалежно від регістра літер) і повертають значення Inf з відповідним знаком.

Усі функції переведення з речового значення в рядкове уявлення, такі як *printf, розпізнають значення Inf і виводять його у вигляді рядка inf з відповідним знаком.

Значення Inf, -Inf в операціях порівняння поводяться природним чином, наприклад, такі умови істинні:

Значення Inf більше за будь-яке кінцеве значення, а значення -Inf менше за будь-яке кінцеве значення.

Однак, зверніть увагу, що Оскільки inf - inf дає в результаті NaN.

Щоб перевірити дійсне значення на приналежність до класу Inf, можна використовувати функції fpclassify або isinf.

Негативний 0

Безліч значень дійсних чисел містить два нулі: позитивний та негативний. Коли в результаті деяких обчислень (наприклад, при множенні або розподілі) виходить нульовий результат, його знак обчислюється за звичайними правилами та зберігається. Тому в результаті може вийти як нормальне значення 0.0, так і негативне -0.0. Ці значення рівні один одному і, відповідно, найбільше від'ємних чисел і найменше від усіх позитивних чисел.

Якщо при операції поділу дільник дорівнює нулю, то його знак враховується при обчисленні знака нескінченності, що виходить. Таким чином, 1.0/-0.0 == -inf, -1.0/-0.0 == inf.

Last modified: Friday, 21-Jun-2013 16:47:24 MSKAlexander Chernov