integer ile integer ı bölüp double sonuç almak ?

Başlatan koray692, 13 Şubat 2016, 13:10:29

koray692

merhaba arkadaşlar ben sensor den verileri int olarak alıp diziye kaydediyorum daha sonra bölme işlemleri yaptırıyorum çok saçma sonuçlar çıkıyor adımlar aşşağıda ki gibi ;


ACCx = (alinan_veri[0]<<8) + (alinan_veri[1]&0b11111111);
G_ACCx = (ACCx - 819)/(16384) ; 
abc=G_ACCx*G_ACCx+G_ACCy*G_ACCy+G_ACCz*G_ACCz;
G_ACC= sqrt(abc);
ACI_ACCx= acos(G_ACCx / G_ACC);   


burda sonuçların doğru çıkması için hep double yada float olması lazım ama alinan_veri[] nin double olarak alınmasına izin vermiyor compiler ACCx te integer oluyor 2. satır kodda integerlar bölünüyor G_ACCx te integer oluyor küsüratlar atılıyor sonuç yanlış çıkıyor nasıl çözebilirim bu sorunu..

Klein

G_ACCx = (double)( ((float)ACCx - 819.0f)/(16384.0f)   ); 

koray692

#2
ACCx i üst tarafta double olarak tanımladım ancak çıkan sonuç çok alakasız

cerdemir

Eger boldugun deger sabit degil de bir degişken ise 1.0 ile çarpabilirsin.
-- cemal

koray692

kural tam olarak nedir ? yani bir işlemde hepsi aynı tipte mi olmak zorunda ?

dursuncemal

hepsinin ayni turde olmasi isini kolaylastirir.farkli turde olanlari ise atama yaparken veya islem yaparken donusturmeniz gerekir. ornek;    Klein > G_ACCx = (double)( ((float)ACCx - 819.0f)/(16384.0f)   );
:=

koray692

#6
bu şekilde yaptım ama neden sonuç yanlış çıkıyor anlayamadım ? mesela accx -270 geldiğinde sonuç -108999945556 gibi çok büyük bir sayı çıkıyor

dursuncemal

#7
sana onerim su olabilir.  islemleri adim adim yapip sonuclari gor hangi islemde hata olusuyor ise hemen yakalarsin.

mesaj birleştirme:: 13 Şubat 2016, 17:02:49

abc=G_ACCx*G_ACCx+G_ACCy*G_ACCy+G_ACCz*G_ACCz;   burada herhangi bir islem onceligi belitmemisiniz   abc= (G_ACCx*G_ACCx) +   (G_ACCy*G_ACCy ) + (G_ACCz*G_ACCz; )
:=

koray692

evet haklısınız orayı hemen düzelteyim...ancak o noktaya gelmeden önceki çok basit bir bölme işleminin sonucu nedense çok büyük bir sayı çıkıyor bütün değerleri kendi elimle girdim yine aynı sonuç.

dursuncemal

#9
sonuc dogru ama haneler mi fazla geliyor?

mesaj birleştirme:: 13 Şubat 2016, 17:27:28

http://blog.vehbiakdogan.com/c-setprecision-kullanimi-ondalikli-sayilarda-yuvarlama.html
:=

koray692


dursuncemal

:=

Yuunus

once alinan_veri[0] ve bunun gibi degiskenlerin hepsini float degisken tanimlayip ona ata carpma bolme islemini ondan sonra yap, birde boyle dene

dursuncemal

sonuc yanlis olmaz yazdirdigin yere strige cevirip yazmayi denersen olacaktir.
:=

koray692

birincisi çıkacak olan sonucu en başta float yada double olarak tanımladım.Debugtan bakarkende veri türünü decimal de değil float olarak gözlemledim sorun çözüldü teşekkür ederim yardımlarınız için :)