我如何让Math.Sqrt返回Bignum而不是Float?

dav*_*orb 0 ruby floating-point bignum sqrt

我正在尝试计算Ruby中一个非常大的数字的平方根.我遇到的问题是Math.sqrt函数看起来像这样

sqrt(numeric) ? float

如果我给它一个非常大的数字,它会给我FloatDomainError:Infinity.

sqrt()返回BigNum 的最佳方法是什么?是否可能有一个宝石或我是否必须编写自己的函数来计算平方根?

在这种情况下,最简单的方法是做什么?泰勒系列?数字的平方根将始终为整数.

Pet*_* O. 5

有一种简单的方法可以计算整数的平方根,从而产生一个整数:

  1. 要查找数字的平方根,请将M和P设置为该数字.
  2. 然后计算(M + P/M)/ 2,将每个分割舍入.
  3. 如果M等于或小于结果,则使用M作为平方根; 否则,将M设置为结果并在步骤2重复此过程.

不过,这种方法对于大数字来说效率可能不高,所以试试看.

编辑:

这是Ruby实现:

def mysqrt(x)
  return 0 if x==0 
  m=x
  p=x
  loop do
    r=(m+p/m)/2
    return m if m<=r
    m=r
  end
end
Run Code Online (Sandbox Code Playgroud)