1

请考虑这个片段(与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 。

gmp_mod我在 PHP Bugtracker 上找不到错误。但是手册页上也没有任何内容暗示不同的可能结果。而且我不明白为什么它会产生不同的结果。

请运行上面的代码片段并发布输出以及您正在使用的操作系统和 CPU 架构,这样我可以确认它不仅仅是我的机器在运行。

此外,如果您知道这是一个已知问题还是预期行为,请指向错误跟踪器中的链接。否则我会用收集到的结果打开一个错误。

谢谢!

PS请让我知道我是否应该为此请求CW。否则,我会将指向 bugtracker 的链接作为答案(除非有人提出令人信服的解释)。

4

1 回答 1

1

这是扩展程序本身的一个错误。几周前我遇到同样的问题时偶然发现了这个错误报告,并得出结论它实际上是扩展程序中的一个错误。我已经尝试使用最新的快照,它工作正常。

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
于 2010-12-10T15:42:58.227 回答