PHP - GMP 和浮点数?

9
以下代码输出0,这是不正确的:
$r = gmp_pow(gmp_init('-1.7976931348623157'), 308);
echo gmp_strval($r);

我认为GMP库能够处理浮点数,或者是我的代码出了问题?


哇,我敢打赌我也用过GMP的浮点数。 :O - Alix Axel
这可能是PHP的gmp包装器的限制,而不是实际的GMP限制。我只是猜测。 - hanshenrik
1个回答

12

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

这也是我发现的。我检查了库的维基页面,并且它说得不一样。(http://en.wikipedia.org/wiki/GNU_Multi-Precision_Library)这很奇怪。 - Matty
@Matty 看起来PHP只使用GMP处理任意长度的整数:http://php.net/manual/en/language.types.integer.php - NullUserException
2
是的,你说得对。http://www.php.net/manual/en/intro.gmp.php 也这么说。我之前没有注意到,因为 PHP 扩展应该是 GMP 库的包装器。我想这个包装器不完整。 - Matty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接