|
В много случаи, прости десетични дроби като 0.1
или 0.7 не могат да бъдат превърнати във
вътрешните им двоични еквиваленти без да претърпят малка загуба в точността.
Това може да доведе до объркващи резултати: например
floor((0.1+0.7)*10) в повечето случаи ще върне
7, вместо очакваното 8,
тъй като вътрешното представяне в действителност е нещо
подобно на 7.9999999999....
Това е свързано с факта, че някои дроби не могат да бъдат
представени в десетичен вид с краен борй цифри.
Например 1/3 в десетичен вид става
0.3333333. . ..
Така че, никога не се доверявайте на последните цифри в резултати от
плаващи числа и никога не сравнявайте числа с плаваща
запетая за равенство. Ако наистина се нуждаете от по-висока
точност, трябва да използвате математическите функции за произволна точност
или пък функциите gmp.
|