为什么gmp_mod在不同平台上产生不同的结果?

时间:2010-12-10 14:47:53

标签: php gmp

请考虑此代码段(与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(除非有人提出令人信服的解释)。

1 个答案:

答案 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