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

时间:2011-11-22 11:31:22

标签: ruby floating-point bignum sqrt

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

sqrt(numeric) → float

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

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

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

1 个答案:

答案 0 :(得分:5)

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

  1. 要查找数字的平方根,请将M和P设置为该数字。
  2. 然后计算(M + P / M)/ 2,将每个分区向下舍入。
  3. 如果M等于或小于结果,则使用M作为平方根; 否则,将M设置为结果并在步骤2重复此过程。
  4. 这种方法对于大数字来说效率可能不高,所以试试看看。

    编辑:

    这是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