Keil'de double

Başlatan teapworm, 20 Mayıs 2014, 22:18:05

SpeedyX

Hocam kendisiyle derken 0.1f ile demek istediniz sanırım, kendisiyle toplarsam (degisken += degisken) sayı 100 olmaz zaten.

  float degisken = 0.1f;
  uint16_t i;
  for(i=0;i<1000;i++)
  {
    degisken += 0.1f;
  }
  if(degisken == 100.0f)
  {
    degisken++;
  }

degisken = 1.00099044E+2 bulunuyor ve eşitlik sağlanmıyor.

-----------------------------------

  degisken = 0.1f;
  degisken *= 1000.0f;
  if(degisken == 100.0f)
  {
    degisken++;
  }


Burada sorun yok, eşitlik sağlanıyor.

Görüldüğü üzere direkt karşılaştırmaya güven olmaz.

speak48

floating point sayı 2 nin tam katı değilse

hiçbir zaman kullanığınız sayı sayının tam kendisi değildir.
lakin print falan ederken sayının aynısıymış gibi yuvarlama yapar

eşitlik olayınıda önce string çevirip stringleri  aynımı diye karşılaştırmak daha güvenilir olabilir.

ama siz floata güvenmeyin gene