少し悩んでしまったのでみなさんのお力をお借りしたくて質問させていただきたいと思います。
テンプレに従うと
1.自分は何がしたくて
->後述するソースから、cppにおける比較はあまり精度が信頼できないのかどうかを聞きたいです。
こういう場合はどう対処するのが妥当か(妥当というのは誤差値として極小さな値をあらかじめ加算しておくなど)
2.どう取り組んで
Visual C++ 2008 EE で作ったプログラムでdouble値の比較でおかしな部分が出てきたので
後述のサンプルコードを作ってみました。
3.トラブル
同じ値なのですが比較がうまくいっていません。
4.何が知りたいか
2番と同じくです。対処法など。
5.知識量
C++とC言語を中途半端に6年程度しています。初歩的な質問で申し訳ないです。
コード
#include"iostream" int main() { double h = 1.0; double v = 0.0; for(int i=0;i<10;i++) v += (double)0.1; printf("h:%.10lf\nv:%.10lf\n",h,v); if(v >= h) std::cout << "OK\n"; else std::cout << "NG\n"; return 0; }出力結果 :
h:1.0000000000
v:1.0000000000
NG
といったように同じ値なのに"vのほうが小さい"と判断されてしまいます。
比較を行なう前にきわめて小さな値(0.0000000001など)をvに足しておくと結果はvのほうが大きいと判断されます。
何かに困るというわけではないのですが
これはこちら側のミスというよりはコンパイラ側の精度が問題なのでしょうか?
よろしくお願いします(変な質問で申し訳ございません)