PHP – GMP и номера с плавающей запятой?

Следующий код выводит 0, что неверно:

$r = gmp_pow(gmp_init('-1.7976931348623157'), 308); echo gmp_strval($r); 

У меня создалось впечатление, что библиотека GMP способна обрабатывать числа с плавающей запятой или я допустил ошибку в коде?

Библиотека GMP способна обрабатывать числа с плавающей запятой,

Это не. Вы можете проверить это с помощью:

 echo gmp_strval(gmp_init('18')); // 18 echo gmp_strval(gmp_init('1.8')); // 0 

Теперь вы можете использовать BCMath вместо этого:

 $num = bcpow('-1.7976931348623157', '308'); echo $num; echo floatval($num); // for a "prettier" format