タグ

JavaScriptとjavaに関するtrashsuiteのブックマーク (1)

  • 浮動小数の誤差 - 中継地点

    2進計算による浮動小数の誤差について意識なく平気で演算したり比較するケースをよく見かけます。 大抵はあまり問題は発生しないのですが、特殊なケースで予想と反する結果となります。 色々と試してみました。 Ruby(irb)の場合 irb(main):001:0> 1-0.9 == 1/10 => false RubyでFixnum型での浮動小数は2進数計算となるようです。 小数表現が内部的に2^nであらわされているために発生する問題です。 10進で値を保持するbigdecimalを使用するのが妥当な解決策と思われます。 irb(main):001:0> require 'bigdecimal' irb(main):002:0> n1 = BigDecimal("1") irb(main):003:0> n09 = BigDecimal("0.9") irb(main):004:0> n10 =

    浮動小数の誤差 - 中継地点
  • 1