Liczby zmiennoprzecinkowe ( float )

Liczby zmiennoprzecinkowe ( typ float , double lub liczby rzeczywiste ) mogą być zapisane przy użyciu dowolnej z poniższych składni :

 
$a

 
=

 
1.234

 
;

 
$a

 
=

 
1.2e3

 
;

 
$a

 
=

 
7E-10

 
;



Maksymalna wielkość liczby zmiennoprzecinkowej jest zależna od platformy operacyjnej, zwykle jest to ~1.8e308, przy precyzji 14 liczb dziesiętnych po przecinku (jest to 64 bitowy format IEEE).

Precyzja liczb zmiennoprzecinkowych

Jest oczywiste , że nawet proste ułamki dziesiętne , takie jak 0.1 lub 0.7 , nie mogą zostać skonwertowane na ich dwójkowe odpowiedniki bez niewielkiej straty dokładności . Może to powodować pewne problemy : na przykład wyrażenie floor( (0.1+0.7)*10 ) zwykle ma wartość 7 , zamiast oczekiwanej 8 , gdyż wewnętrzna reprezentacja tego wartości to liczba 7.9999999999.. . .

Powiązane jest to z faktem , że dla pewnych ułamków zwykłych nie istnieje skończone rozwinięcie dziesiętne . Na przykład 1 / 3 w reprezentacji dziesiętnej ma wartość 0.3333333 . . . .

Dlatego nigdy nie należy wierzyć liczbom zmiennoprzecinkowym do ostatniej cyfry i nigdy nie należy wykonywać operacji porównania na stwierdzenie równości . Do operacji na liczbach zmiennoprzecinkowych o naprawdę dużej precyzji należy użyć biblioteki BCMath lub funkcji gmp .