Kayan noktalı sayılarla alakalı bir soru sormak istiyorum. yardımcı olmak isteyenler mesaj atarlarsa sevinirim.
1e+1 == 10 ** 1 # bu ifade True değerini veriyor.
1e+2 == 10 ** 2 # bu ifade de True değerini veriyor.
#
#
1e+22 == 10 ** 22 # bu ifade de True değerini veriyor.
# ancak;
1e+23 == 10 ** 23 # bu ifade False değerini veriyor.
1e+22 bir sınır değer midir diye düşünürken, aklıma 1e+22'den küçük bir sayıyı test etmek geldi.
(1e+21) + 1 == (10 ** 21) + 1 # ancak bu ifade False değerini verdi.
sormak istediğim sorulara gelirsek:
1e+23 == 10 ** 23 ifadesi neden False değerini verir? Yani 1e+23 sayısı neden int(1e+23) sayısına eşit değildir?
Madem int(1e+21) sayısı 1e+21 sayısına eşit, o halde (1e+21) + 1 == (10 ** 21) + 1 neden False değerini verir?
Not: Mesela sys.maxsize bize 92233720368547758070 sayısını veriyor. Bu sayı 19 haneli bir sayı. Mesela 17 haneli bir sayı için şu sorguyu yapıyorum:
Mesela 1e+17 + 9, 1.0000000000000002e+17 sayısını veriyor. Ancak 9'a kadar olan sayılarda sonuç yine 1e+17 oluyor. Bu kayan noktalı sayılar aritmetiği konusunda daha fazla bilgilenmek lazım aslında.
Aynen öyle. Daha paylaştığınız sayfayı okumadım o yüzden aklımdaki şu sorular hala güncelliğini koruyor. Neden sayılar farklı formata geçiyorlar? Veya 10 ** 23 ile 1e+23 aynı sayıların farklı ifade ediliş biçimleriyse sonuçlar neden farklılaşıyor? Belki dokümanı okuduktan sonra buna bir cevap bulunabilir.
Küçük floatların hata vermesi hakkında zaten bilginiz vardır diye tahmin ediyorum:
>>> 0.1 + 0.2
0.30000000000000004
Bu tamamen floatların hafızada saklanma sistemi ile alakalıdır. Aynı sistem büyük sayılarda da hata yapılmasına sebep olur. Güzel olduğunu düşündüğüm ingilizce bir kaynak buldum:
Ayrıca şu videoyu da öneririm:
Konu ile ilgili dökümana da kısa da olsa bir bölüm eklemek istiyorum. Sonuçta
>>> 0.1 + 0.2
0.30000000000000004
Gibi bir durumu ilk defa yaşayan herkes şaşırır
aib’in de dediği gibi IEEE 754 standardında -ki bu çoğu yazılım dili tarafından kullanılmaktadır-
işler bu şeklide belirlendiği için böyle çalışıyor. Tabii bunun da sebepleri var. Bu sebeplerden ilk linkte bahsediliyor. Burada da kısa bir türkçe makale var: