- ベストアンサー
計算結果の出力について
df1とdf2の計算結果が普通の計算(機)では5.333と10.666になるのに、以下のプログラムでは6と12になっていしまうのですが、どうしてですか? #include<iostream.h> void main() { int n=7; int m=3; float df1=n-1-2/m; float df2=(m-1)*df1; cout<<df1; cout<<"\n"; cout<<df2; }
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
たぶん float df1=n-1-2/m; の処理の際に、2/m は 2/3 で、0.666666となるべきところが、0になっているのだろうと思います。ゆえに n-1-2/m は 7-1-0となり、df1 は 6 になります。 float df2=(m-1)*df1; の処理では、 (3-1)*6で df2 は 12 になります。df1 と df2 をそれぞれ 5.333 と 10.666 にしたいならば、 float df1=n-1-2/m; → float df1=float(n)-1.0-2.0/float(m); float df2=(m-1)*df1; → float df2=(float(m)-1.0)*df1; にしてみてはいかがでしょうか。(実際にコンパイル・実行での確認をしていないので何とも言えませんが…。)
お礼
回答ありがとうございます。kamejiroさんのいうようにしてみたら、正確に計算されました。