Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => C/C++ => Konuyu başlatan: koray692 - 13 Şubat 2016, 13:10:29

Başlık: integer ile integer ı bölüp double sonuç almak ?
Gönderen: koray692 - 13 Şubat 2016, 13:10:29
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..
Başlık: Ynt: integer ile integer ı bölüp double sonuç almak ?
Gönderen: Klein - 13 Şubat 2016, 15:06:27
G_ACCx = (double)( ((float)ACCx - 819.0f)/(16384.0f)   ); 
Başlık: Ynt: integer ile integer ı bölüp double sonuç almak ?
Gönderen: koray692 - 13 Şubat 2016, 16:27:09
ACCx i üst tarafta double olarak tanımladım ancak çıkan sonuç çok alakasız
Başlık: Ynt: integer ile integer ı bölüp double sonuç almak ?
Gönderen: cerdemir - 13 Şubat 2016, 16:39:31
Eger boldugun deger sabit degil de bir degişken ise 1.0 ile çarpabilirsin.
Başlık: Ynt: integer ile integer ı bölüp double sonuç almak ?
Gönderen: koray692 - 13 Şubat 2016, 16:43:02
kural tam olarak nedir ? yani bir işlemde hepsi aynı tipte mi olmak zorunda ?
Başlık: Ynt: integer ile integer ı bölüp double sonuç almak ?
Gönderen: dursuncemal - 13 Şubat 2016, 16:49:09
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)   );
Başlık: Ynt: integer ile integer ı bölüp double sonuç almak ?
Gönderen: koray692 - 13 Şubat 2016, 16:53:33
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
Başlık: Ynt: integer ile integer ı bölüp double sonuç almak ?
Gönderen: dursuncemal - 13 Şubat 2016, 16:56:54
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; )
Başlık: Ynt: integer ile integer ı bölüp double sonuç almak ?
Gönderen: koray692 - 13 Şubat 2016, 17:07:56
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ç.
Başlık: Ynt: integer ile integer ı bölüp double sonuç almak ?
Gönderen: dursuncemal - 13 Şubat 2016, 17:15:26
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)
Başlık: Ynt: integer ile integer ı bölüp double sonuç almak ?
Gönderen: koray692 - 13 Şubat 2016, 17:31:57
sonuç yanlış...
Başlık: Ynt: integer ile integer ı bölüp double sonuç almak ?
Gönderen: dursuncemal - 13 Şubat 2016, 17:39:30
tur donusum hatasi vardir.
Başlık: Ynt: integer ile integer ı bölüp double sonuç almak ?
Gönderen: Yuunus - 13 Şubat 2016, 22:59:49
once alinan_veri[0] ve bunun gibi degiskenlerin hepsini float degisken tanimlayip ona ata carpma bolme islemini ondan sonra yap, birde boyle dene
Başlık: Ynt: integer ile integer ı bölüp double sonuç almak ?
Gönderen: dursuncemal - 14 Şubat 2016, 01:09:17
sonuc yanlis olmaz yazdirdigin yere strige cevirip yazmayi denersen olacaktir.
Başlık: Ynt: integer ile integer ı bölüp double sonuç almak ?
Gönderen: koray692 - 14 Şubat 2016, 12:22:02
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 :)