C言語関係掲示板

過去ログ

No.920 書式指定子と丸め誤差

[戻る] [ホームページ]
No.11663

printf の精度指定子について
投稿者---bare(2004/01/11 17:03:49)


小数の精度指定子の機能について、わからないことがあるので
教えてください。

例えば、%.3f の場合は、小数第4位以下を四捨五入して表示するという
解釈でいいのでしょうか?

しかし、次のソースで4.45を入力すると4.4が表示され、
4.451を入力すると4.5が表示されます。
なぜなのでしょうか?

#include <stdio.h>
main()
{
    float f;
    scanf("%f", &f);
    printf("%.1f", f);
}


No.11666

Re:printf の精度指定子について
投稿者---YuO(2004/01/11 17:49:36)


>例えば、%.3f の場合は、小数第4位以下を四捨五入して表示するという
>解釈でいいのでしょうか?

丸めるとはありますが,四捨五入とは定められていません。

JIS X 3010:1993 7.9.6.1 fprintf関数
f
... この変換は,適切なけた数へ値の丸めも行う。


ISO/IEC 9899:1999 7.19.6.1 The fprintf function / Paragraph 8
f, F
... The value is rounded to the appropriate number of digits.



>しかし、次のソースで4.45を入力すると4.4が表示され、
>4.451を入力すると4.5が表示されます。

丸め誤差があるからです。
例えば,printf("%.20f", f);のようにして,
実際にfにどのような値が保持されているか調べてみるとよいでしょう。