请考虑此代码段(与How is 13 % 64= -13相关)
if(extension_loaded('GMP')) {
printf("
PHP Version: %s
gmp_strval(gmp_mod('-13', '64')) = %s
gmp_strval(gmp_mod(-13, 64)) = %s
gmp_mod(-13, 64) = %s
",
phpversion(),
gmp_strval(gmp_mod('-13', '64')),
gmp_strval(gmp_mod(-13, 64)),
gmp_mod(-13, 64)
);
}
在我的Win7上,x64会产生
PHP Version: 5.3.3
gmp_strval(gmp_mod('-13', '64')) = 51
gmp_strval(gmp_mod(-13, 64)) = -51
gmp_mod(-13, 64) = -51
这是奇怪的,因为在http://codepad.viper-7.com/gqN5aa它只产生51。
I could not find a bug for gmp_mod
on the PHP Bugtracker。但是manual page也没有任何暗示可能的结果。我不明白为什么会产生不同的结果。
请运行上面的代码段并将输出与您正在使用的操作系统和CPU架构一起发布,这样我就可以确认这不仅仅是我的机器正在运行。
另外,如果您知道这是一个已知问题还是预期的行为,请指出我在bugtracker中的链接。否则我将打开收集结果的错误。
谢谢!
P.S。请告诉我是否应该要求CW。否则我会将链接作为答案提交给bugtracker(除非有人提出令人信服的解释)。
答案 0 :(得分:1)
这是扩展本身的一个错误。几周前,当我遇到同样的问题时,我偶然发现this bug report,并得出结论,这实际上是扩展中的一个错误。我尝试过最新的快照,它运行正常。
PHP Version: 5.3.5-dev
gmp_strval(gmp_mod('-13', '64')) = 51
gmp_strval(gmp_mod(-13, 64)) = 51
gmp_mod(-13, 64) = 51