3

さて、私はPHPスクリプトでいくつかの計算を行う必要があります。そして、私は間違った振る舞いをする1つの式を持っています。

echo 10^(-.01);

出力10

echo 1 / (10^(.01));

出力0

echo bcpow('10', '-0.01') . '<br/>';

出力1

echo bcdiv('1', bcpow('10', '0.01'));

1.000を出力します。

私はbcscale(100)BCMathの計算に使用しています。

ExcelとWolframMathematicaは答えを〜0,977237にします。

助言がありますか?

4

5 に答える 5

11

カレットは、 PHPのビット単位のXOR演算子です。pow()整数に使用する必要があります。

于 2009-07-31T09:30:48.397 に答える
6

PHP 5.6は、ビット単位のXOR演算子**と混同しないように、二重アスタリスク()で示される固有の累乗演算子を最終的に導入しました。^

5.6より前:

$power = pow(2, 3);  // 8

5.6以降:

$power = 2 ** 3;

代入演算子も利用できます。

$power   = 2 ** 2;
$power **=      2;  // 8

多くの議論と投票を通じて、演算子は右結合(左ではない)であり、その演算子の優先順位はビット単位のnot演算子~)よりも上であることが決定されました。

$a = 2 **  3 ** 2;  // 512, not 64 because of right-associativity
$a = 2 ** (3 ** 2); // 512

$b = 5 - 3 ** 3;    // -22 (power calculated before subtraction)

また、私にはあまり意味がない何らかの理由で、累乗は否定単項演算子-)の前に計算されます。したがって、次のようになります。

$b = -2 ** 2;        // -4, same as writing -(2 ** 2) and not 4
于 2014-02-26T10:18:19.897 に答える
4

演算子はビット単位の^XOR演算子です。powbcpowまたはgmp_pow:のいずれかを使用する必要があります

var_dump(pow(10, -0.01));  // float(0.977237220956)
于 2009-07-31T09:31:54.277 に答える
0

bcpow関数は、整数の指数のみをサポートします。代わりにpowを使用してみてください。

于 2009-07-31T09:37:29.553 に答える
0

2014年、およびPHP 5.6アルファアップデートの時点で、PHPの最終リリースに到達することを期待する多くの機能が含まれています。**オペレーターです。

だからあなたはあなたを得ること2 ** 8ができます256。PHP Docsによると、「**べき乗をサポートするために、適切な結合演算子が追加されました」。

于 2014-04-30T00:02:01.697 に答える