2011-11-22 47 views
0

我想在Ruby中計算一個非常大的數字的平方根。我的問題是,Math.sqrt功能看起來像這樣我如何獲得Math.Sqrt返回一個Bignum而不是一個浮動?

sqrt(numeric) → float

如果我給它一個非常大的數字,它會給我FloatDomainError:無限。

sqrt()返回BigNum的最佳方式是什麼?有沒有可能是一個寶石,或者我將不得不寫我自己的函數來計算平方根?

在這種情況下,最簡單的方法是什麼?泰勒系列?數字的平方根將是總是是整數。

+0

哇,大於'浮法:: MAX#=> 1.79769313486232e + 308'?你如何得到那麼大的東西?有什麼中間點可以讓你紮根? –

回答

5

有一種簡單的方法來計算的整數,這導致一個整數的平方根:

  1. 爲了找到一個數的平方根,設置M和P到該號碼。
  2. 然後計算(M + P/M)/ 2,向下舍入每個分區。
  3. 如果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 
+0

有效的公式是(2M + 2P)/ M ..我正確嗎? – Baz1nga

+0

這將是偉大的,它是如何工作的sm簡單數字..說9 – Baz1nga

+0

@ Baz1nga:不,這個公式是完全不同於((m + p/m)/ 2),並會導致不正確的結果。 –

相關問題