2012-12-17 49 views
-2

在我的函數中我想用php bc-math來提高精度。我試圖取代所有的操作無濟於事。這是浮動到字符串的轉換問題嗎?爲什麼我的數學運算不起作用?

function complex_iterate($re,$im) 
    { 
    $re=strval($re); 
    $im=strval($im); 
    $zisqr = $zrsqr = $iter = $zIm = $zRe = "0"; 
    bcscale(50); 

    while (floatval(bcadd($zrsqr,$zisqr)) < 4 
    && $iter < $this->iterations 
    ) 
    { 
     $zIm = bcadd($zIm,$zRe); 
     $zIm = bcadd($zIm,$zIm); 
     $zIm = bcadd($zIm,$im); 
     $zRe = bcadd(bcsub($zrsqr,$zisqr),$re); 
     $zrsqr = bcmul($zRe,$zRe); 
     $zisqr = bcmul($zIm,$zIm); 
     ++$iter; 
    } 
    return $iter; 
+0

爲什麼downvote?你可以解釋嗎? – Bytemain

+1

這將是瘋狂的緩慢。即使使用C++的std :: complex類,我也有Mandelbrot設置迭代運行非常緩慢,在任意精度庫中執行它可能會更慢。 – robbrit

+0

是的,當然,使用任意精度庫會有助於提高質量,至少當你超越浮點數的精度時。這隻會很慢。 – robbrit

回答

1

使用任意精度的圖書館會比浮點數慢得多,尤其是對於像計算Mandelbrot集這確實很多,很多重複迭代。如果你想要速度,我建議使用類似gmplib這樣的庫在C中重寫。

您的代碼中的問題是您正在使用bcadd而不是bcmul作爲循環中的第一行。

+0

它被低估了,因爲這個問題有點難以理解。 – robbrit