-2

私の関数では、php bc-math を使用して精度を向上させたいと考えています。すべての操作を無駄に置き換えようとしました。これは float から string への変換の問題ですか?

    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;
4

1 に答える 1

1

任意精度のライブラリを使用すると、浮動小数点数よりもはるかに遅くなります。特に、多くの反復を繰り返すマンデルブロ集合の計算などの場合はそうです。速度が必要な場合は、 gmplibなどのライブラリを使用してCでこれを書き直すことをお勧めします。

コードの問題は、ループ内の最初の行にのbcadd代わりにを使用していることです。bcmul

于 2012-12-17T22:02:19.983 に答える