Привлечение к власти в PHP

Ну, мне нужно сделать некоторые вычисления в 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.

Какие-либо предложения?

Related of "Привлечение к власти в PHP"

Каретка – это бит-мудрый оператор XOR в PHP. Вам нужно использовать pow() для целых чисел.

PHP 5.6, наконец, ввел врожденный оператор мощности, обозначенный двойной звездочкой ( ** ) – не путать с ^ , побитым оператором XOR.

До 5.6:

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

5.6 и выше:

 $power = 2 ** 3; 

Также доступен оператор присваивания:

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

Во многих дискуссиях и голосовании было решено, что оператор будет право-ассоциативным (не левым), а его приоритет оператора выше побитового, а не оператора ( ~ ).

 $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 

Оператор ^ является побитовым оператором XOR . Вы должны использовать либо pow , bcpow либо gmp_pow :

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

Функция bcpow поддерживает только целые показатели. Вместо этого попробуйте использовать pow .

Начиная с 2014 года и обновления PHP 5.6 alpha, есть много включенных функций, которые, я надеюсь, делают его окончательной версией PHP. Это оператор ** .

Таким образом, вы можете сделать 2 ** 8 вы получите 256 . PHP Docs говорят: «Для поддержки экспоненциальности был добавлен правильный ассоциативный ** оператор».