Merhaba; asagidaki atama islemlerini sirasiyla yaptiktan sonra degiskenin son halini ekrana yazdiriyorum ve ekrana
-0.000000 yaziyor.
float fval;
fval=0;
fval+=0.02;
fval-=0.02;
printf("%f\n",fval);
ancak siralamayi degistirip once degeri azaltip sonra artirirsam ekrana 0.000000 yaziyor.
fval=0;
fval-=0.02;
fval+=0.02;
printf("%f\n",fval);
neden, bunu nasil duzeltebilirm? hem atollic hemde Devc++ denedim durum ayni.
Not:0 sifirdir gibi bir cevap yazmayin lutfen.
Hocam 0.02f olarak yaparsanız düzelecektir.
Çünkü derleyici 0.02 sayısını double hassasiyet olarak aldığından o sayıyı 0.019999999 olarak islem yapıyor olabilir. Bu yüzden aslında eşit sayıları birbirinden çıkarmıyor ya da toplamıyorsunuz.
Özetle double/float hassasiyet sebebiyle bu sorun ortaya çıkmakta.
Bence gayet normal. Çünkü toplama veya çıkartma işlemleri sonucu float değişkenin işaret biti değişiyor ve son hali kalıyor. Aşağıdakilerini incelerseniz anlayacaksınız.
http://www.puntoflotante.net/FLOATING-POINT-FORMAT-IEEE-754.htm
Tesekkur ederim,
@huseyink @yas