Python bölme işlemini yanlış yapıyor, sebebi nedir?

Öncelikle selamlar,
bu benim buradaki ilk sorum olacak, yardımlarınız için şimdiden teşekkürler.

Çok basit bir daire alan ve çevre hesaplaması kodu yazdığımızda:

pi = 3.14
alan = pi * (yaricap ** 2)
print("Dairenin alanı:", alan, "santimetrekaredir.")

cevre = 2 * pi * yaricap
print("Dairenin çevresi: {} santimetredir.".format(cevre))

Yarıçap 5 girdiğimizde, şöyle bir sonuç alıyoruz:

Dairenin alanı: 78.5 santimetrekaredir.
Dairenin çevresi: 31.400000000000002 santimetredir.

Burada çevreyi neden 31.4000000000002 şeklinde veriyor? Normalde 31.4 vermesi gerekmez mi?
Herkese kolaylıklar…

Acemilik işte :slight_smile: Kodlar sanırım böyle daha iyi anlaşılacak

Çok basit bir daire alan ve çevre hesaplaması kodu yazdığımızda:

yaricap = int(input("Lütfen dairenin yarıçapını santimetre cinsinden giriniz: "))
pi = 3.14
alan = pi * (yaricap ** 2)
print("Dairenin alanı:", alan, "santimetrekaredir.")

cevre = 2 * pi * yaricap
print("Dairenin çevresi: {} santimetredir.".format(cevre))

Yarıçap 5 girdiğimizde, şöyle bir sonuç alıyoruz:

Lütfen dairenin yarıçapını santimetre cinsinden giriniz: 5
Dairenin alanı: 78.5 santimetrekaredir.
Dairenin çevresi: 31.400000000000002 santimetredir.

Burada çevreyi neden 31.4000000000002 şeklinde veriyor? Normalde 31.4 vermesi gerekmez mi?
Herkese kolaylıklar…
[/quote]

Merhaba.

İngilizceniz ne seviyede? Ona göre konu ile alakalı ayrıntılı kaynaklar da verebiliriz.

Basit cevap: Hafiza alani sinirli oldugu icin her sayi temsil edilemiyor:

>>> 1/3
0.3333333333333333
1 Beğeni

İngilizce kaynak okuyabilirim, memnun olurum

Aslında burada tersi bir durum var. Normalde 31.4 diyip bitirmesi gerekiyor. Elimize hesap makinesi alıp yapsak vereceği sonuç da 31.4.
Fakat burada 31.400000000002 diyor, ilginç geldi bana.

Aynı durum var, ama bilgisayarlar onluk değil ikilik tabanda çalışıyor. Mesela onluk tabanda 0.1 sayısı, onluk tabanda devirsiz iken ikilik tabanda devirlidir.

Sonucu yuvarlıyor olabilir veya asıl amacı en kesin değeri vermek olan ve daha yavaş çalışan algoritmaları kullanıyor olabilir. Sonuçta hesap makineleri insanların kullanması için, uygulamanın yaptığı işlemin aldığı süre kullanıcının giriş yaptığı süreye kıyasla bir hiç.

Konu ile alakalı şurada daha ayrıntılı bir yazı var:

Bu makaledeki terimler ile internette ileri okuma da yapabilirsiniz. Bir de şuraya göz atabilirsiniz:

1 Beğeni

Teşekkürler cevaplarınız için.
Fakat hesap makinesi olmadan biz bu hesabı elle bile yapsak;

(2 * 3.14* 5 ) işlemi için 31.4 sonucu yoruma açık bir sonuç değil. Söylemek istediğiniz anladım, fakat ilginç geldi. Eğer bu konuda bir kaynak varsa okumak isterim. Tekrar teşekkürler :slightly_smiling_face:

Bu sayı bizim kullandığımız onluk tabanda devirsiz bir sayı, sınırlı sayıda basamak ile ifade edilebiliyor. Ancak bilgisayarların kullandığı ikilik tabanda devirli bir sayı, sınırlı sayıda basamak ile ifade edilemiyor. Bu yüzden sonuçta kayma var.

Bunun üstesinden gelmenin en garanti yolu pay ve paydası tam sayı olan kesirler kullanmaktır herhalde, bunun için Python’da decimal kütüphanesi var.

0.1₃ + 0.1₃ = 0.2₃ de yoruma acik degil ama kime sorsam “0.666667” filan diyor.

1 Beğeni

hatta

Cevaplarınız için çok teşekkürler.
EkremDincel paylaştığı bir video anlamama yarımcı oldu. Çok fazla zaman harcamadan, float ile ilgili kabul edilmesi gereken bir husus olduğunu anladım ve yoluma devam ediyorum :slightly_smiling_face:

aib ; aynı şekilde çok teşekkürler

1 Beğeni