Подтвердить что ты не робот

Деление на нулевую ошибку при использовании модуля

Предполагается, что оператор модуля должен показать остаток. Как и для echo(34%100) выходов 34. Но почему я получаю ошибку "Division by zero" для этого кода echo(34%4294967296)

4b9b3361

Ответ 1

4294967296 является 2^32 и не может быть представлен как 32-битное число - он обертывается обратно на 0. Если вы используете 64-разрядную версию PHP, это может сработать.

Возможно, вы сможете использовать модуль с плавающей запятой fmod, чтобы получить то, что вы хотите, без переполнения.

Ответ 2

https://bugs.php.net/bug.php?id=51731

2^31 is the largest integer you can get on Windows.

Если вы все еще хотите модерировать большие числа, используйте bcmod.

Ответ 3

Там много сообщений о том, что мода становится неустойчивым с большими целыми числами в php. Может быть переполнение в расчете или даже в том самом номере, которое будет давать вам ошибки. Лучше всего использовать для этого большую библиотеку. Проверьте gmp или bcmath.

Ответ 4

Я нашел этот вопрос в поиске "деления на нулевую ошибку при использовании модуля", но причина была иной.

Модуль (оператор %) не будет работать, если denomenator меньше 1. Используя fmod(), решает проблему.

Пример:

$num = 5.1;
$den = .25;

echo ($num % $den);
// Outputs Warning: Division by zero
echo fmod($num, $den);
// Outputs 0.1

$num = 5.1;
$den = 1;

echo ($num % $den);
// Outputs 0, which is incorrect
echo fmod($num, $den);
// Outputs 0.1, which is correct