Я использую функции bcmod и gmp_mod в php для обработки больших чисел.PHP bcmod или gmp_mod type type issue
Это прекрасно работает:
// large number must be string
$n = "10000000000000000000001";
$y = 1025;
$c = 1025;
// Both works the same (also tested in python)
$y = gmp_mod((bcpowmod($y, 2, $n) + $c) , $n);
$y = bcmod ((bcpowmod($y, 2, $n) + $c) , $n);
Но вход $n
не является статичным. Так что я должен использовать отливку типа нравится:
$n = (string)10000000000000000000001;
Это не работает больше.
для ГМП дает эту ошибку:
gmp_mod(): Unable to convert variable to GMP - string is not an integer
А про Ьс, дает мне эту ошибку:
bcmod(): Division by zero
Проблема заключается в том, (string)
не преобразует его в строку тонкой , Есть идеи?
Edit: Я нашел решение here, но до сих пор вход строка:
$bigint = gmp_init("9999999999999999999");
$bigint_string = gmp_strval($bigint);
var_dump($bigint_string);
Я знаю причину, просто ищет решение. –
никогда не определяете тип $ n, и он всегда будет строкой ... если принимать входные данные из ... вы ca't typecast –
См. Решение –