Функция PHP Math возвращает неверный результат - PullRequest
2 голосов
/ 15 октября 2011

У меня есть переменная, содержащая:

40 * ($plvl^2)) + (360 * $plvl);

Где $ plvl равно 2. Согласно Вольфраму и Google правильный результат должен быть 880, но функция PHP возвращает 720.

Кто-нибудь знает, почему они возвращают разные значения и как я могу исправить это, чтобы привести к 880?

Ответы [ 6 ]

9 голосов
/ 15 октября 2011
$plvl^2

просто инвертирует второй младший бит plvl (^ - это битовое XOR ).Вы хотите pow:

40 * pow($plvl, 2) + 360 * $plvl;
5 голосов
/ 15 октября 2011

Оператор ^ не является возведением в степень, это побитовый оператор eXclusive OR (XOR).Вместо $plvl^2 используйте pow($plvl, 2)

4 голосов
/ 15 октября 2011

^ - это XOR, а не возведение в степень.2 ^ 2 ноль.

1 голос
/ 15 октября 2011

Просто:

$plvl = 2;

echo 40*$plvl*$plvl+360*$plvl; //880

Не нужны скобки на самом деле.

0 голосов
/ 15 октября 2011

В дополнение к другим ответам: обычно простое умножение намного эффективнее, чем использование pow. Поэтому, возможно, вам следует использовать $plvl * $plvl вместо pow($plvl,2).

0 голосов
/ 15 октября 2011

Используйте

40 * pow($plvl,2) + (360 * $plvl);

тогда это работает. Возможно, оператор ^ не является допустимым оператором php.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...