double型の計算結果 – プログラミング – Home

通知
すべてクリア

[解決済] double型の計算結果


kosy
 kosy
(@kosy)
ゲスト
結合: 19年前
投稿: 3
Topic starter  

はじめまして。
kosyといいます。

以下のコードを実行すると、
四捨五入がうまく行われません。

double dVal1[] = {145.5, 160.8, 160.2, 156.5, 154.8,
169.75, 181.3, 172.8, 181, 173.2};
double dVal2[] = {160.8, 160.2, 156.5, 154.8, 169.75,
181.3, 172.8, 181, 173.2,167.5};
double orgVal[] = {165.58500, 167.78500};
double val[] = {0, 0};

for(int i=0; i<10; i++ ) {
val[0]+=dVal1[i];
val[1]+=dVal2[i];
}

for( int i=0; i<2; i++ ) {
printf(------------------------\n);

val[i]=val[i]/10;

printf(A1 %lf\n, val[i]);
printf(A2 %.*lf\n, 2,val[i]);

printf(O %.*lf\n, 2,orgVal[i]);
}

1回目の計算結果
A1:165.585000
A2:165.58
O :165.59

2回目の計算結果
A1:167.785000
A2:167.79
O :167.79

1回目のA2は四捨五入されないのでしょうか?
理屈が分からないため、どこら調べてよいか
わからないので、投稿させて頂きました。

よろしくお願いします。


引用未解決
トピックタグ
kosy
 kosy
(@kosy)
ゲスト
結合: 19年前
投稿: 3
Topic starter  

投稿者です。

開発環境書き忘れましたので、追記します。

IDE:VS2002でC++です。
Win32のコンソールアプリケーションで現象が発生します。

よろしくお願いします。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

> printf(A1 %lf\n, val[i]);

この表示の時にも四捨五入されているのです。
もっと高い精度で表示してみてください。

printf(A1 %.20lf\n, val[i]);


返信引用
kosy
 kosy
(@kosy)
ゲスト
結合: 19年前
投稿: 3
Topic starter  

早速の回答有難うございます。

精度を上げて表示したところ、
原因がわかりました。

有難うございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました