printf(lcd_putc,"%f"ondalik); ile LCD de gösterilebilecek en büyük sayı kaçtır?

Başlatan RaMu, 06 Ağustos 2014, 05:03:17

RaMu

Kısaca başlıktada belirttiğim gibi,
2x16 lcdde printf ile direk gösterilebilecek en büyük ve küçük Float sayı kaçtır?

#include <main_LCD.h>
#include <flex_lcd.c>

float32            ondalık=30000000.1200;        //-1.5 x 10üzeri45  den     3.4 x 10üzeri38 

void main()
{
lcd_init();    //lcd hazırlanıyor
   
   while(TRUE)
   {
   lcd_gotoxy(1,1);                                //1. sutun 1. satıra git
   printf(  lcd_putc,"%f"  ondalık);              //ondalık sayı gösterme
   }

}


Ccsc helpde float sayının
-1.5 x 10üzeri45  den     3.4 x 10üzeri38  e
değer alabileceğini söylemiş,
peki
printf(  lcd_putc,"%f"  ondalık);
ile lcdde gösterilebilecek en büyük sayı kaçtır,
yukarıdaki programda 30milyonu göremiyorum,
unsigned int32 değişken ile tutabildiği 4 294 967 295 e kadar lcdye yazdırmada sıkıntı yok,
floattaki durum nedir?
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

RaMu

Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

Gökhan BEKEN

printf(  lcd_putc,"%f"  ondalık);
yapmadan önce, float sayıyı diziye(katara) kendiniz çevirirseniz, kesin çözüm olur.
Daha önce integer sayıları çevirmek için bir fonksiyon yazmıştım:
http://gokhanbeken.com/sayi-tiplerini-katara-cevirme-fonksiyonu-yazalim
normalde c dilinde bunun için itoa fonksiyonu var: http://fresh2refresh.com/c/c-type-casting/c-itoa-function/

benzer bir fonksiyon floatlar için de yazılabilir. Hatta hiç uğraşmayıp itoa fonksiyonunu iki kere kullanarak yapılabilir. Virgülden öncesini ayrı çevirip, virgülden sonrasını ayrı çevirip, ikisini tek bir katarda aralarına nokta koymak suretiyle birleştirebilirsiniz.

bu sayfadaki ftoa fonksiyonu da çözüm olabilir:
http://www.geeksforgeeks.org/convert-floating-point-number-string/
Özel mesaj okumuyorum, lütfen göndermeyin.

ali.bayuk

Merhaba,
30000000.1200 -> bu girdiğiniz sayı aslında 32bit değil 64bit bundan dolayı sıkıntı yaşıyorsunuzdur.
http://www.h-schmidt.net/FloatConverter/IEEE754.html
bu site yardımcı olur diye umuyorum.
Kolay Gelsin.

RaMu

@meftun
fonksiyon yazıp çevirmek istemiyorum,
zaten printf float sayı yazabiliyor, neden kendimiz tekrar çevirmeyle uğraşalım,
ben sadece sınırlarını öğrenmek istredim,
benim yazdırabildiğim  -21474836.48 > 21474833.92arasındaki sayılar,
başka deneyen varsa doğrulamak istedim.
Birde ccsc de gerçekten float sayı mantığı ne acaba, kayan noktalımı vs.
ve sınırları ne,
acaba printf demi bir sınır var yoksa ccsc nin float sayı tutmasındamı vs.

@ali.bayuk
ccsc nin float sayı için hangi yöntemi kullandığını bilmediğim için
30milyon 32 bit olurmu olmazmı birşey diyemem,
ccsc standarda uymamış olabilir ki float için birçok standart var.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html


RaMu

Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html