2010-12-10 86 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 
相關問題