はじめに
いつもお世話になっています。
表題について質問があります。
組込みC(C99)でdouble型を使わずに小数点の計算を行いたいのですが可能でしょうか?
取りあえずVisual Studioで以下の様なソースコードを作ってみましたがやはり端数処理が上手くいきません。
C
1#include <stdio.h> 2 3#define MILLION_TIMES (1000000) 4 5int main(char argc, char *argv[]) { 6 7 int dividend; // 被除数 8 int divisor; // 除数(0は絶対に使わない) 9 10 dividend = 87; 11 divisor = 31; 12 13 // 確認用です(実数型は使わない) 14 double dDiv = (double)dividend / divisor; 15 16 17 int integer = dividend / divisor; 18 int idec = ((dividend * MILLION_TIMES) / divisor)-(integer * MILLION_TIMES) ; 19 20 21 // 商に除数をかければ被除数になる 22 printf("[double]\n"); 23 printf("%d / %d =%lf\n", dividend, divisor, dDiv); 24 printf("%f * %d =%lf\n", dDiv, divisor, dDiv*divisor); 25 printf("\n"); 26 printf("[int]\n"); 27 printf("%d / %d =%d.%06d\n", dividend, divisor, integer, idec); 28 printf("%d.%d * %d =%d\n", integer, idec, divisor, divisor*integer+(divisor*idec)/ MILLION_TIMES); 29 30 return 0; 31}
[double]
87 / 31 =2.806452
2.806452 * 31 =87.000000[int]
87 / 31 =2.806451
2.806451 * 31 =86
これ以外にも負数の場合の動作も考える必要があって悩んでいます。
これ以上は無理なのでしょうか?
回答5件
あなたの回答
tips
プレビュー