C++ floor int 誤差

f:id:peroon:20191123022649j:plain

原因

  • パット見 1839816.0000に見えるが、実は1839815.9999999..... で、floorした時に1839815.0となってしまう

対策

  • かけるのを先にやれるなら先にやる

eps

  • epsを足してからfloorすればいいと思ったが、今回の場合
const long double EPS = 0.0000000001;
  • を足しからfloorしても誤差は消えず、もっと荒いEPSを足したら意図通りに動いた。しかしEPSを大きくしていくと別のミスが発生しそう

プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?

プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?