![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.1ベストアンサー
- 回答日時:
double型のコンピュータ内での内部表現は2進数(基数が2の浮動小数点数)です。
0.1は10進数ではきりの良いという小数ですが
2進数では無限小数(循環小数)になり
無限に桁を保持することはできないので
途中で丸められてしまいます。(丸めは四捨五入と同等の処理です。)
ここで誤差が発生するため思っているような出力結果にならなかったのでしょう。
試しにそのコードを私の環境で実行し、
printfで小数点以下15桁まで出力してみたところ
最後の11.0は正確には
10.999999999999979
でした。
参考:
http://e-words.jp/w/E4B8B8E38281E8AAA4E5B7AE.html
http://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95% …
この回答へのお礼
お礼日時:2006/05/28 04:40
コードを実行までして頂き本当にありがとうございます。
とても分かりやすいご説明でした。
丸め誤差を考慮しつつ、これからは加算の順序も工夫していきたいと思います。
No.3
- 回答日時:
演算誤差のため、最後が11より'ほんの少し'でも小さかったら、
intにキャストすると切り捨てられて10になります。
この回答へのお礼
お礼日時:2006/05/28 04:53
画面に表示される数字の小数部分よりも更に精度の高いところで誤差が発生するんですね。
今後は気をつけます。
ご回答ありがとうございました。
No.2
- 回答日時:
doubleなどの浮動小数点型は値によっては厳密に正確な値を表現することが出来ません。
特に 0.1などの正確に表現できない値を加算・減算を繰り返すと値の精度は計算の度に劣化して行きます。
このあたりは「浮動小数点」「誤差」で検索してみると解説しているページが幾つも見つかると思います。
このケースの場合、printfによる表示では 11.0になっていても実際の iの値は 10.99999999999と限りなく 11に近いけれども 11未満の値になっていると思われます。
for文を (ii=1.0; ii<10.91; ii+=0.1) にすれば 11.0正しく表示されると思いますが、後半の値は若干の誤差を含んでいるので、計算にはほとんど支障はないはずですが、比較などでは注意が必要です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.net Double と...
-
O(n log n)について2
-
c languageで 簡単な質問があ...
-
16進数 加算 減算 C言語
-
三菱シーケンサ(Aシリーズ)で...
-
”/”を使わずに割り算したいんで...
-
計算の丸め誤差の解消について
-
ハッシュ関数
-
C言語プログラミングにて、arct...
-
有効数字について 以前質問をし...
-
除算を使わずに10で割りたい。
-
VB6のFIX関数での誤差について
-
VB6.0での小数点の扱いについて
-
Double型について
-
EXCELの関数"STDEV(標準偏差)"...
-
floatの有効桁数
-
どんな数字を入力してもaverage...
-
乱数 なぜ剰余を使うのか
-
powf を使わずにべき乗を計算
-
浮動小数演算は実行環境の変化...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
O(n log n)について2
-
16進数 加算 減算 C言語
-
c languageで 簡単な質問があ...
-
ExcelでPC(パソコン)によって...
-
”/”を使わずに割り算したいんで...
-
有効数字について 以前質問をし...
-
三角比の俯角の計算
-
ExcelのINT関数の計算結果がお...
-
VB.net Double と...
-
floatの有効桁数
-
パソコンで階乗を計算
-
三菱シーケンサ(Aシリーズ)で...
-
除算を使わずに10で割りたい。
-
VB6.0での小数点の扱いについて
-
EXCELの関数"STDEV(標準偏差)"...
-
時刻の比較
-
VBAでの割り算の余りの求め方
-
計算の丸め誤差の解消について
-
C言語プログラミングにて、arct...
-
VBAでミリ秒まで出力する方法
おすすめ情報