HI-TECH float sorunu

Başlatan cundali11, 06 Mart 2011, 20:20:46

cundali11

Merhaba arkadaşlar,
HI-TIDE'de HI-TECH 9.65PL1 kullanarak aşağıdaki kodu derlerken sonuçun ondalık kısmı sapıyor. Aynı kodu CCS kullanarak derliyorum ve  doğru cevap alıyorum. Aynı şekilde çarpma işlemlerindede farklılıklar görüyorum. CCS nin FLOAT.H dosyasıyla bizimkini değiştirdim :) yine sonuç değişmedi.
Bu kadar küsüratla uğraşmamın sebebi şu, Hi-tech'e bir kaç gün önce bu formdaki dökümanları kullanarak başladım ve kendi sprintf kütüphanemi yazıp ondalık sayılarda dahi yer sıkıntısı yaratmadan sonuca varmak istiyorum. Bunun için çıkartma işlemi yapmam lazım ama ondalık kısımlar sapıtıyor. Bu işi CCS nasıl çözmüş olabilir. Bunu oturup işlem yaparak nasıl halledebiliriz. Teşekkürler.
float say1=21356.456;
	float say2;
	long say3;
	say2=(say1-123.0)*1000;
	say3=(long)say2;

cundali11

Yardımınız için teşekkür ederim fakat yine aynı sonuç çıkıyor.

cundali11

Denedim yine sonuç aynı. Ayrıca tüm değişkenleri float ve double olarak, f koyarak koymayarak denedim sonuç hep aynı çıkıyor.(sonuç sürekli 21233664 çıkıyor. Aslında 21233456 çıkması gerek) Şimdi 1000 ile çarpma işlemi yapmadan lcd ye sonucu float olarak çıkardım ve ondalık degeri .5 e yuvarladı yani 21233.5 çıktı, burası ayrı bi muamma.
   Çıkartma işleminde sayının basamagını düşürünce yuvarlanan basamak sayısı genişliyor. Burası mnatıklı tabiki ama benim anlayamadıgım CCS bunu daha kapsamlı bir şekilde nasıl başarmış. Hi tech yuvarlama işini basite indirgemiş gibi. Bunu nasıl geliştirebiliriz.

Tagli

Acaba sorun casting işleminde olabilir mi? Son satırı çıkarınca iki derleyici de say2 için aynı değeri veriyor mu?
Gökçe Tağlıoğlu

cundali11

Alıntı yapılan: Tagli - 06 Mart 2011, 23:39:10
Acaba sorun casting işleminde olabilir mi? Son satırı çıkarınca iki derleyici de say2 için aynı değeri veriyor mu?
hocam sorun burda değil zaten o işlem varkende yokkende sonuç aynı. 

M_B

İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

tmcone

CCS 32 bitlik float kullanıyor; Hitech ise 24 bitlik. Dolayısıyla hassasiyet yetersiz. Çözüm için değişkenleri double tanımla ve derleyici ayarlarından double boyutunu 32 bit yap.

cundali11

Alıntı yapılan: M_B - 07 Mart 2011, 08:14:43
Merhaba Hocam;
Altakı link isinizi gorecektir. Kolay gelsin.

https://www.picproje.org/index.php/topic,19299.msg128736.html#msg128736
Teşekkürler konuyu açmadan önce bu sayfaya rastlamıştım ama mplab ta derlemeyi beceremedim fazlada uğraşmamıştım. Ordaki ayarların sprintf le alakalı oldugunu sanmıştım.
Alıntı yapılan: tmcone - 07 Mart 2011, 09:53:25
CCS 32 bitlik float kullanıyor; Hitech ise 24 bitlik. Dolayısıyla hassasiyet yetersiz. Çözüm için değişkenleri double tanımla ve derleyici ayarlarından double boyutunu 32 bit yap.
bunu hi-tide de yapmanın bir yolu varmı. Bu akşam mplabı kullanarak çözüme gitmeye çalışacagım. Eger hi-tide bunu beceremiyorsa bundan sonra onu kullanmam.

cundali11

Yardımlarınız için teşekkür ederim.
@tmcone; dediğinizi uyguladım haklıymışsınız saolun. Bunu hi-tide de yapmanın bir yolunu bulamadım demek bundan sonra mplab kullanacağız :)