0

比較計算のために小数点以下 3 桁まで正確な浮動変数を取得しようとしています。以下の方法を試していますが、うまくいきません。理由がわからないので、どこが間違っているのか誰か教えてください。

このコードからの出力はb = 10000.050617, bb = 10000050 and fbb = 10000.000. fbb を 10000.050 にしたい。

int bb; double m,n,p,q,b,t,u,fbb;

m=24.161, n=57.695, p=67.092, q=148.011;
t=p-m; u=q-n;
b=t*t+u*u; bb=b*1000; fbb=bb/1000;

printf("b=%.6lf,bb=%i,fbb=%.3lf\n",b,bb,fbb);

return 0;
4

5 に答える 5

5

あなたが実行するとき

 fbb = bb/1000;

操作を次のように扱いint/intint

試す

fbb = ((double)bb)/1000.000;

として扱われ(double)/(double)、 a を返しますdouble

于 2013-09-20T10:01:50.297 に答える
5

bbは であるintためbb / 1000、整数除算に従います。いずれかまたは両方のオペランドを に変更しますdouble。最も簡単な方法は次のとおりです。

fbb = bb / 1000.0;       //type of 1000.0 is double

また

fbb = (double)bb / 1000
于 2013-09-20T10:01:45.697 に答える
1

あなたが実行するとき

fbb = bb/1000;

操作を int/int として扱い、int を返します。その価値の低下。

またlong bb;、int の代わりに、int の値が 32767 であるため、高い値を取得します。

試す

fbb = bb/1000.000;

また

fbb = (double)bb/1000;
于 2013-09-20T10:18:31.430 に答える
0

使用する

fbb=(double)bb/1000;

bb は整数で、結果は整数で、double に変換されます

于 2013-09-20T10:02:48.877 に答える
0

bbint です。したがってbb/1000、int 除算を実行すると、int = 1000 (小数点なし) になります。その int 値は double にキャストされます。

于 2013-09-20T10:02:18.357 に答える