Неточности в данных типа float

autosoft

Guest
Неточности в данных типа float

Если выполнить следующий код
PHP:
for ($i = 0, $j = 1; $i < 50; $i++, $j *= 10) printf("%2d => %f\n", $i, $j);
то PHP генерирует вывод
PHP:
 0 => 1.000000
 1 => 10.000000
 2 => 100.000000
 3 => 1000.000000
 4 => 10000.000000
 5 => 100000.000000
 6 => 1000000.000000
 7 => 10000000.000000
 8 => 100000000.000000
 9 => 1000000000.000000
10 => 10000000000.000000
11 => 100000000000.000000
12 => 1000000000000.000000
13 => 10000000000000.000000
14 => 100000000000000.000000
15 => 1000000000000000.000000
16 => 10000000000000000.000000
17 => 100000000000000000.000000
18 => 1000000000000000000.000000
19 => 10000000000000000000.000000
20 => 100000000000000000000.000000
21 => 1000000000000000000000.000000
22 => 10000000000000000000000.000000
23 => 100000000000000000000000.000000
24 => 1000000000000000600000000.000000
25 => 10000000000000006000000000.000000
26 => 100000000000000060000000000.000000
27 => 1000000000000000600000000000.000000
28 => 10000000000000006000000000000.000000
29 => 100000000000000060000000000000.000000
30 => 1000000000000000600000000000000.000000
31 => 10000000000000006000000000000000.000000
32 => 100000000000000060000000000000000.000000
33 => 1000000000000000600000000000000000.000000
34 => 10000000000000006000000000000000000.000000
35 => 100000000000000060000000000000000000.000000
36 => 1000000000000000600000000000000000000.000000
37 => 10000000000000006000000000000000000000.000000
38 => 100000000000000060000000000000000000000.000000
39 => 1000000000000000600000000000000000000000.000000
40 => 10000000000000006000000000000000000000000.000000
41 => 100000000000000150000000000000000000000000.000000
42 => 1000000000000001500000000000000000000000000.000000
43 => 10000000000000015000000000000000000000000000.000000
44 => 100000000000000150000000000000000000000000000.000000
45 => 1000000000000001500000000000000000000000000000.000000
46 => 10000000000000015000000000000000000000000000000.000000
47 => 100000000000000200000000000000000000000000000000.000000
48 => 1000000000000002000000000000000000000000000000000.000000
49 => 10000000000000020000000000000000000000000000000000.000000
Откуда берется погрешность? Так должно быть?
 

neko

tеam neko
да, так и должно
используй bcmath или gmp если нужна большая точность
 
Сверху