今日topcoderの問題を解いてて、浮動小数点の誤差ではまりました。問題を単純化したコードが以下になります。
#include <iostream> using namespace std; int main(int argc, char** argv) { double small = 1e-18; double big = 1; double added = small + big; cout << added << endl; // 1が出力される。(small分が切り捨てられてる) }
加算を行った結果、小数点以下の値が切り捨てられています。一瞬何が起こったのか解らなかったのですが、折角なので追ってみる事にしました。