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..
G_ACCx = (double)( ((float)ACCx - 819.0f)/(16384.0f) );
ACCx i üst tarafta double olarak tanımladım ancak çıkan sonuç çok alakasız
Eger boldugun deger sabit degil de bir degişken ise 1.0 ile çarpabilirsin.
kural tam olarak nedir ? yani bir işlemde hepsi aynı tipte mi olmak zorunda ?
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) );
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
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; )
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ç.
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 (http://blog.vehbiakdogan.com/c-setprecision-kullanimi-ondalikli-sayilarda-yuvarlama.html)
sonuç yanlış...
tur donusum hatasi vardir.
once alinan_veri[0] ve bunun gibi degiskenlerin hepsini float degisken tanimlayip ona ata carpma bolme islemini ondan sonra yap, birde boyle dene
sonuc yanlis olmaz yazdirdigin yere strige cevirip yazmayi denersen olacaktir.
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 :)