为什么gmp_mod在不同的平台上产生不同的结果?
问题描述:
请考虑这个片段(与How is 13 % 64= -13)为什么gmp_mod在不同的平台上产生不同的结果?
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,这64位产生
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架构一起发布,以便确认它不仅仅是我的机器正在发挥作用。
此外,如果您知道这是一个已知问题还是预期的行为,请将我指向错误跟踪器中的链接。否则,我将用收集的结果打开一个错误。
谢谢!
P.S.请让我知道我是否应该为此请求CW。否则,我会把错误追踪器的链接作为答案(除非有人提出了一个令人信服的解释)。
答
这是扩展本身的错误。几周前我遇到同样的问题时,我偶然发现了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
+1也让我大吃一惊。不是CW – mario 2010-12-10 14:56:39