Python'un uygulamasına gerçekten özgü değildir, ancak ondalık dizge işlevlerine herhangi bir kayan noktalı sayıya uygulanmalıdır.
Bir kayan nokta sayısı temelde bir ikili sayıdır, ancak bilimsel gösterimlerde önemli rakamların sabit bir sınırı vardır.
Tabanla paylaşılmayan asal sayı faktörüne sahip herhangi bir sayının tersi her zaman yinelenen nokta noktası gösterimi ile sonuçlanır. Örneğin 1/7, 10 ile paylaşılmayan ve bu nedenle tekrarlayan bir ondalık gösterime sahip olan bir ana faktöre (7) sahiptir ve aynı, 2 ve 5 numaralı birincil faktörlerle 1/10 için geçerlidir, ikincisi 2 ile paylaşılmaz ; yani 0.1 nokta noktasından sonra sonlu sayıda bit ile tam olarak temsil edilemez.
0.1'in tam bir temsili olmadığından, yaklaşımı ondalık nokta dizesine dönüştüren bir işlev genellikle belirli değerleri yaklaşık olarak göstermeye çalışır, böylece 0.1000000000004121 gibi sezgisel olmayan sonuçlar elde etmezler.
Kayan nokta bilimsel gösterimde olduğu için, tabanın gücü ile çarpma, sayının sadece üssü kısmını etkiler. Örneğin, ondalık gösterim için 1.231e + 2 * 100 = 1.231e + 4 ve ikili gösterimde 1.00101010e11 * 100 = 1.00101010e101. Tabanın gücü olmayan bir güçle çarparsam, önemli basamaklar da etkilenir. Örneğin, 1.2e1 * 3 = 3.6e1
Kullanılan algoritmaya bağlı olarak, yalnızca önemli rakamlara dayanarak ortak ondalık sayıları tahmin etmeye çalışabilir. Hem 0,1 hem de 0,4 ikili değerlerde aynı anlamlı rakamlara sahiptir, çünkü bunların şamandıraları esasen sırasıyla (8/5) (2 ^ -4) ve (8/5) (2 ^ -6) kesmeleridir . Algoritma 8/5 sigfig desenini ondalık 1.6 olarak tanımlarsa, 0.1, 0.2, 0.4, 0.8 vb. Üzerinde çalışacaktır. Ayrıca, float 3 gibi float 10'un bölünmesi gibi diğer kombinasyonlar için sihirli sigfig desenleri olabilir. ve istatistiksel olarak 10'a bölünerek oluşması muhtemel diğer sihirli desenler.
3 * 0.1 durumunda, son birkaç önemli rakam muhtemelen bir şamandırayı 3 şamandıra 10'a bölmekten farklı olacaktır, bu da algoritmanın hassas kayıp toleransına bağlı olarak 0.3 sabiti için sihirli sayıyı tanımamasına neden olur.
Düzenleme:
https://docs.python.org/3.1/tutorial/floatingpoint.html
İlginçtir, en yakın yaklaşık ikili kesiri paylaşan birçok farklı ondalık sayı vardır. Örneğin, 0.1 ve 0.10000000000000001 ve 0.1000000000000000055511151231257827021181583404541015625 sayılarının hepsi 3602879701896397/2 ** 55 ile yakındır. ) == x.
Hassasiyet kaybına tolerans yoktur, eğer float x (0.3) float y (0.1 * 3) ile tam olarak eşit değilse, repr (x) repr (y) ile tam olarak eşit değildir.