double sayi = 2.10; void setup() { Serial.begin(9600); } void loop() { sayi = sayi - 0.10; if (sayi == 0) { Serial.println(“Sayı sıfıra eşit”); } Serial.println(sayi); delay(100); } Neden sıfıra en yakın olduğu zamanı kullanıyoruz neden tam bir eşitlik söz konusu değil ? Denetleyicinin mimarisi ile alakalı bir durum mu ?
sayi==0.00 gibi bir dene. noktadan sonra hassasiyet 6 dijite kadar. belki sayi değeri aslında 0.000001 gibi bir değerse bulamaz http://arduino.cc/en/Reference/Float
0.01 , ve 6 dijite kadar denedim sonuç olumsuz.
http://www.youtube.com/watch?v=0ECNMM97CTY burdaki videonun 15. dk sından sonra anlatılıyor neden olmadığı
sayıyı 100 le çarp dijitten kurtar öyle karşılaştır
@serdar link için teşekkürler.Sayın Çoşkun Taşdemir kitapta da videoda da fabs() kullanımını tavsiye etmiş. @okoman öneriniz mantıklı, sanırım 8 bit’lik kısıtlı işlem kapasitesinden dolayı kayan noktalı sayılarla arası iyi değil arduino’nun. Teşekkürler.
Floating point sayılarla bütün değerleri tam olarak ifade etmek mümkün olmuyor ve sorun da buradan kaynaklanıyor. Arduino’daki gibi 8 bit mikrodenetleyiciler için float sayılar oldukça işlem yükü getirir, dolayısıyla çok lazım olmadıkça kullanılmamalı. Birçok işlem tam sayılarla yapılabiliyor zaten. Örneğin gerilim hesaplama işlemleri yapıyorsanız 4.57 volt yerine mV cinsinden 4570 olarak ifade edebilirsiniz.