float
Gerçek sayılar (veya kayan noktalı sayılar) şu sözdizimleri ile
belirtilebilir:
]]>
Biçimsel olarak PHP 7.4.0 ve sonrasında (öncesinde altçizgilere izin
verilmezdi):
Bir gerçek sayının bellekte kapladığı genişlik platforma göre değişmekteyse
de kabaca 14 hanelik bir hassasiyetle 1.8e308'lik olası bir en büyük değer
(64 bitlik IEEE biçemi) hepsi için sağlanır.
Kayan nokta hassasiyeti
Kayan noktalı sayılar sınırlı bir hassasiyete sahiptir. Sisteme bağımlı
olmakla birlikte PHP normalde (1.11e-16'lık bir yuvarlamadan dolayı görece
en büyük hatayı verecek olan) IEEE 754 çift hassasiyetli biçimi kullanır.
4 temel işlemden daha karmaşık aritmetik işlemler daha büyük hatalar
verebilir, dolayısıyla işlemler karmaşık hale gelmeye başlayınca hatanın
açıklanması bir önkabul olarak ele alınmalıdır.
Ek olarak, 0.1 veya 0.7 gibi 10
tabanında kayan noktalı sayılar olarak tamamiyle gösterilebilen gerçel
sayılar, 2 tabanında kayan noktalı sayılar olarak tamamiyle gösterilemezler.
Bu bakımdan, az da olsa bir kayıp olmaksızın dahili ikil
karşılıklarına dönüştürülemezler. Bunun şöyle bir sonucu olur: örneğin,
floor((0.1+0.7)*10) işlevinden beklendiği gibi
8 değil, 7 döner; bunun sebebi
dahili gösterimin aslında 7.9999999999999991118... gibi
bir değer olmasıdır.
Bu bakımdan, son ondalık hanesine bakarak sonucun ne olacağına karar
verilemez, bu bakımdan kayan noktalı sayılar arasında asla eşitlik
karşılaştırmaları yapılmaz. Eğer daha yüksek hassasiyet isteniyorsa keyfi hassasiyetli matematik işlevleri ve gmp işlevleri kullanılabilir.
"Basit" bir açıklama için
kayan noktalı sayılar
kılavuzuna bakınız.
float türüne dönüşümDizelerden
Dize sayısal veya
öncü sayısal ise, karşılık gelen float değere çözümlenir,
aksi takdirde sıfıra (0) dönüştürülür.
Diğer türlerden
Diğer türlerdeki değerler için, dönüşüm, değerin önce int'e
ardından float'a dönüştürülmesiyle gerçekleştirilir.
Daha fazla bilgi için bkz.
int türüne
dönüşüm.
Belirli türlerin int türüne dönüştürülürken tanımlanmamış
davranışları olup, bu ayrıca float türüne dönüştürülürken de
geçerlidir.
Kayan noktalı sayıların karşılaştırılması
Yukarıdaki uyarıda kısaca değinildiği gibi kayan noktalı sayılar arasında
eşitlik karşılaştırmaları, bunların dahili gösterimlerinden dolayı biraz
sorunludur. Bununla birlikte, bu sınırlamaların aşılmasını ve kayan noktalı
sayılar arasında karşılaştırma yapılmasını sağlayan yollar vardır.
Kayan noktalı değerlerin eşitliğini sınamak için yuvarlamadan dolayı ortaya
çıkan göreli hatanın bir üst sınırı kullanılır. Bu değer makine epsilonu
veya yuvarlama birimi olarak bilinir ve hesaplamalardaki kabul edilebilir en
küçük farktır.
$a ve $b 5 haneli hassasiyetle
eşittir.
]]>
NaN
Bazı sayısal işlemler NAN sabiti ile gösterilen bir
değerle sonuçlanabilir. Bu sonuç, kayan noktalı hesaplamalarda
tanımlanamayan veya gösterilemeyen bir değeri gösterir. Bu değerin, kendisi
dahil herhangi bir değerle gevşek ya da sıkı bir karşılaştırması &false;
sonucuna sebep olur.
NAN farklı değerdeki herhangi bir sayıyı temsil
ettiğinden kendisi dahil fakat &true; hariç, başka bir değerle
karşılaştırılmamalı, bunun yerine değer is_nan ile
sınanmalıdır.