在PHP中提升能力

时间:2009-07-31 09:18:53

标签: php math exponent exponentiation bcmath

好吧,我需要在PHP脚本中做一些计算。我有一个行为错误的表达。

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和Wolfram Mathematica给出答案〜0,977237。

有什么建议吗?

5 个答案:

答案 0 :(得分:11)

插入符号在PHP中是有点明智的XOR operator。您需要使用pow()作为整数。

答案 1 :(得分:6)

PHP 5.6最终引入了一个固有的幂运算符,用双星号(**)表示 - 不要与按位异或运算符^混淆。

在5.6之前:

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

5.6及以上:

$power = 2 ** 3;

也可以使用赋值运算符:

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

通过许多讨论和投票,决定运算符是右关联的(不是左),其运算符优先级高于按位运算符~)。< / p>

$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

答案 2 :(得分:4)

^ operator is the bitwise XOR operator。您必须使用powbcpowgmp_pow

var_dump(pow(10, -0.01));  // float(0.977237220956)

答案 3 :(得分:0)

bcpow function仅支持整数指数。请尝试使用pow

答案 4 :(得分:0)

截至2014年,以及PHP 5.6 alpha更新,我希望它能够在PHP的最终版本中实现。它是**运算符。

所以你可以2 ** 8得到256。 PHP Docs说:“添加了一个右关联**运算符来支持取幂”。