0

irbで次のことを行うと、 8.0 + 63.27 次の結果が得られます。 => 71.27000000000001

誰かがそれで何が起こっているのか手がかりを持っていますか?

さらに良いことに、これを修正する方法の手がかりを誰かが持っていますか?

ruby -v
ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin11.3.0]

編集:浮動小数点計算に関する記事をありがとう。何年もプログラミングした後、わからないのはバカだと思います。

(バグタグを削除しました)

4

3 に答える 3

3

これは、浮動小数点値を扱う場合の一般的な問題 (バグではありません)です。BigDecimal正確な表現が必要な場合は、(標準ライブラリで利用可能)を使用してください。

于 2012-08-16T08:59:13.820 に答える
3

なぜこの結果が得られるのかについての素人の説明については、なぜ浮動小数点計算がそれほど不正確なのかを試してください。. 詳細については、すべてのコンピューター科学者が浮動小数点演算について知っておくべきこと

これらの問題を軽減するには、他の回答で提案されているようにBigDecimalを使用するか、Ruby の任意精度浮動小数点ライブラリであるFltを使用してみてください。

于 2012-08-16T09:02:10.403 に答える
1

これはバグではありません。これは、浮動小数点が内部で表現される方法によるものです。内部的に浮動小数点を使用しbase 2ます。このため、10 の基数で有限表現を持つ数値は、基数 2 で周期的になる可能性があります。計算後に元に戻すと、参照した動作を示すことができます。このような状況を解決するには、浮動小数点値が等しいかどうかをチェックすることを避け、適切なイプシロンと比較します。

于 2012-08-16T08:57:18.233 に答える