0

次のコードがあります。

def pi
  pivalue =  4 * (4 * Math.atan(1.0/5.0) - Math.atan(1.0/239.0))
  pivaluestring = pi.to_s
  puts pivaluestring[0,20]
end

pivalue が小数点以下 16 桁に制限されているのはなぜですか? はるかに大きな制限(最大)が必要です。

4

4 に答える 4

4

BigMathBigDecimalを使用します(標準ライブラリ内):

require "bigdecimal/math"

p BigMath::PI(50).to_s
#=>"0.3141592653589793238462643383279502884197169399375105820974944592309049629352442819E1"

# Or
include BigMath
p PI(100).to_s

BigDecimal は、任意精度の浮動小数点 10 進数演算を提供します。

于 2013-07-27T16:34:19.053 に答える
0

であるからMath.atanですFloat。計算の途中でそれだけの精度しか得られないため、それ以上の精度を得ることはできません。

ちなみに、浮動小数点精度の場合、次のようにするだけで pi を取得できます。

Math::PI # => 3.141592653589793
于 2013-07-27T16:18:25.410 に答える
0

浮動小数点値は、値を格納するために使用されるビット数に基づいて精度が制限されます。浮動小数点演算と制限に関する次の記事をお読みください。

http://floating-point-gui.de/

http://www.ruby-doc.org/core-2.0/Float.html

于 2013-07-27T16:19:29.657 に答える