2010-12-10 88 views
1

请考虑这个片段(与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。否则,我会把错误追踪器的链接作为答案(除非有人提出了一个令人信服的解释)。

+1

+1也让我大吃一惊。不是CW – mario 2010-12-10 14:56:39

回答

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 
相关问题