"%f" と .round() で境界値における結果が異なる。
一瞬、ひょっとすると "%f" は偶数への丸めなのでは!?
とも思ったのだが、完全に気のせいだった。
上記の状況は、少なくとも以下の環境で発生している。
「%f 丸め」とかでググってみると他の言語でも同じような状況らしい。
例えば以下。
20190228: 追記
以下のような話題を見かけたんだが、偶然にもと言うか、上で挙げている人の blog だった。
$ ruby -e 'puts "%.1f" % 1.25' 1.2
$ ruby -e 'puts (1.25).round(1)' 1.3あうち、orz
一瞬、ひょっとすると "%f" は偶数への丸めなのでは!?
とも思ったのだが、完全に気のせいだった。
$ ruby -e 'puts "%.1f" % 1.35' 1.4
$ ruby -e 'puts "%.1f" % 1.15' 1.1
上記の状況は、少なくとも以下の環境で発生している。
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.4 LTS Release: 16.04 Codename: xenial $ ruby --version ruby 2.3.1p112 (2016-04-26) [x86_64-linux-gnu]
「%f 丸め」とかでググってみると他の言語でも同じような状況らしい。
例えば以下。
- hnwの日記 / 2008-12-10: roundとprintfの丸めに関する不整合
20190228: 追記
以下のような話題を見かけたんだが、偶然にもと言うか、上で挙げている人の blog だった。
- hnwの日記 / 2019-02-26: ECMAScriptの浮動小数点数の丸め仕様がスゴい, ネタ元: twitter: 1100651858400501760
タグ
コメントをかく