4

PHPpow()は、以下を処理することを望んでいません。

 pow(-5,1/3);

実際には動作するはずですが。PHPでこれを行うにはどうすればよいですか?

4

4 に答える 4

3

ここでは基本的に負の数の3番目のルートを取ります。

これは、実数空間では常に可能であるとは限りません。したがって、場合によっては、その方程式を解くために虚数単位が必要になります。

NAN底が負で指数が1未満の場合、phpは出力するように見えます。

于 2013-03-24T21:30:41.017 に答える
1

PeeHaaが指摘しているように、ドキュメントには、一部の指数では結果が「奇妙」になる可能性があると記載されています。

代数的には次のことが有効です。

-x^(p) == -1*(x^p)

これを回避策として使用できます。コードで話す:

$x = pow(5,1/3)*-1;

ただし、mが偶数であるn / mのような指数には注意してください!

次の関数を使用して、それをカバーすることもできます。

function real_pow($base, $exponent){
  if($base < 0){
    if($exponent >= 1) return pow($base * -1, $exponent) * -1;
    else{
      if(is_nan(pow($base, $exponent))) return false;
      else return pow($base, $exponent);
    }
  }else{
    return pow($base, $exponent);
  }
}

結果が複素数でない場合、この関数は有効なパワーを返します。そうである場合、falseを返します。

于 2013-03-24T21:38:05.667 に答える
0
$base=-5;
$exponent=1/3;

$result = ($base<0?-1:1)*pow(abs($base),$exponent);

PHPが処理しない複素数を生成するため、分母が偶数の有理数である指数には無効です。あなたはあなた自身のクラス/関数を書くか、それをグーグルすることができます、ウェブにいくつかあります、しかし私は決してテストしませんでした。

于 2013-03-24T21:52:13.467 に答える
0

数学的には、 -5 1/3は、単に-5の立方根として定義されます。これは約-1.71です。

ただし、浮動小数点で1/3を正確に表す方法はありません。したがって、PHPに-50.33333333333333331482961のような計算を要求していることになります。

ここで、その指数の正確な有理展開に偶数の分母がある場合、結果は純粋に虚数になります。正確な有理展開に奇数の分母がある場合、結果は純粋に実数です。問題は、精度が不十分なため、分母が「偶数」か「奇数」かを判断できないことです。

したがって、PHPは気にしません。それはあなたがそれをすることができないことをあなたに告げるだけです、そしてそれは話の終わりです。

于 2013-03-24T22:08:07.017 に答える