在PHP中提升能力

Kur*_*aze 3 php math bcmath exponent exponentiation

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

echo 10^(-.01);
Run Code Online (Sandbox Code Playgroud)

产出10

echo 1 / (10^(.01));
Run Code Online (Sandbox Code Playgroud)

输出0

echo bcpow('10', '-0.01') . '<br/>';
Run Code Online (Sandbox Code Playgroud)

输出1

echo bcdiv('1', bcpow('10', '0.01'));
Run Code Online (Sandbox Code Playgroud)

输出1.000 ....

bcscale(100)用于BCMath计算.

Excel和Wolfram Mathematica给出答案~0,977237.

有什么建议?

sou*_*rge 11

插入符号是PHP中的按位XOR运算符.你需要使用pow()整数.


sil*_*ire 6

PHP 5.6最终引入了一个先天的幂运算符,用双星号(**)表示 - 不要与^按位XOR运算符混淆.

在5.6之前:

$power = pow(2, 3);  // 8
Run Code Online (Sandbox Code Playgroud)

5.6及以上:

$power = 2 ** 3;
Run Code Online (Sandbox Code Playgroud)

赋值运算符也可用:

$power   = 2 ** 2;
$power **=      2;  // 8
Run Code Online (Sandbox Code Playgroud)

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

$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)
Run Code Online (Sandbox Code Playgroud)

此外,由于某些原因对我来说没有多大意义,因此在否定一元运算符(-)之前计算幂,因此:

$b = -2 ** 2;        // -4, same as writing -(2 ** 2) and not 4
Run Code Online (Sandbox Code Playgroud)