< :前の番号
^ :番号順リスト
> :次の番号
P :前の記事(スレッド移動)
N :次の記事(スレッド移動)
|<:前のスレッド
>|:次のスレッド
^ :返事先
_:自分への返事
>:同じ返事先を持つ記事(前)
<:同じ返事先を持つ記事(後)
---:分割してスレッド表示、再表示
| :分割して(縦)スレッド表示、再表示
~ :スレッドのフレーム消去
.:インデックス
..:インデックスのインデックス
Issue #5273 has been reported by Marc-Andre Lafortune.
----------------------------------------
Bug #5273: Float#round returns the wrong floats for higher precision
http://redmine.ruby-lang.org/issues/5273
Author: Marc-Andre Lafortune
Status: Open
Priority: Normal
Assignee:
Category: core
Target version: 1.9.3
ruby -v: r33186
Float#round returns the wrong floats for higher precision.
Rounding can be off:
2.5e-22.round(22) # => 2.0e-22
It can also return values that have extra decimals:
2.5e-31.round(31) # => 3.0000000000000003e-31
2.5e-36.round(36) # => 2.9999999999999998e-36
Both errors can occur at the same time too:
2.5e-39.round(39) # => 2.0000000000000002e-39
I believe these errors occur only for ndigits >= 22. For ndigits > 22, 10**(-ndigits) is not an exact Float (as 5 ** 23 won't fit in the 53 bits of a double's mantissa). For ndigits < 22, there should be enough bits left to avoid rounding errors.
For ndigits >= 22, the algorithm to use should be similar to the one used to convert doubles to string.
Hopefully, this is the last bug for #round with a given precision.
--
http://redmine.ruby-lang.org