mrb. arkadaslar mikroc arm de sıradan bir bölme işlemi yaparak lcd ekranda float sayıyı görmeye calısıyorum . aşagıdaki gibi kod yazdım ancak sonuc 1233.999 gibi sacma sapan bir sayı gösteriyor.
longsayi=1234567;
floatsayi = (longsayi / 1000) ;
Lcd_Cmd(_LCD_CLEAR);
floatToStr(floatsayi, LCD_Buff );
Lcd_Out(1,1,LCD_Buff);
sonuc 1233.999
konu ile yardımınıızı rica ederim.
floatsayi = (float) longsayi / 1000.0f ;
bi şöyle dene
longsayi=1234567; floatsayi =longsayi; floatsayi/= 1000;
bir de böyle
longsayi=8787878879 ;
floatsayi= longsayi;
floatsayi/=1000;
Lcd_Cmd(_LCD_CLEAR);
floatToStr(floatsayi, LCD_Buff );
Lcd_Out(1,1,LCD_Buff);
sonuc 197944.2 sonuc hatalı iboibo kardeşim
bilen yokmu arkadaslar bu sorunun kaynagını
Alıntı yapılan: universitelim54 - 30 Temmuz 2019, 08:19:05longsayi=8787878879 ;
Bu long a sığmaz.
Mod 4milyar küsürünü(32 bite sığan max sayı) alırsan
bu değişkenin içine yazdığın sayının
197944299
olduğunu görürsün, printf ile longsayının değerinide yazdırıp bak.
İlk örnekteki ise saçma veya yanlış değil,
float işlemler yapılırken yaklaşık sonuçlar alırsın,
kullandığın çoğu picte float işlem yapabilecek donanım yoktur,
yazılım ile belli yömtemler kullanılarak float işlemleri yaklaşık olarak yapılır.
Buradada kütüphane neyi nasıl yapıyorsa o sonuçları alırsın.
MikroC şunu kullanıyorum demiş:
https://download.mikroe.com/documents/compilers/mikroc/pic/help/arithmetic_types.htm