MikroC arm de aritmetik işlem sorunu

Başlatan universitelim54, 29 Temmuz 2019, 22:11:01

universitelim54

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.

devrecii

#1
floatsayi = (float)  longsayi / 1000.0f ;
    bi şöyle dene

longsayi=1234567;  floatsayi =longsayi;  floatsayi/= 1000;
  bir de böyle

universitelim54

          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

universitelim54

bilen yokmu arkadaslar bu sorunun kaynagını

RaMu

#4
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
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html