2010-12-10 5 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, 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 нет ничего намека на разные возможные результаты. И я не понимаю, почему он должен давать разные результаты.

Пожалуйста, запустите приведенный выше фрагмент кода и опубликуйте вывод вместе с той операционной системой и архитектурой процессора, которую вы используете, поэтому я могу подтвердить, что не только моя машина работает.

Кроме того, если вы знаете, является ли это известной проблемой или даже ожидаемым поведением, укажите мне ссылку в bugtracker. В противном случае я открою ошибку с собранными результатами.

Спасибо!

P.S. пожалуйста, дайте мне знать, если я попрошу CW для этого. В противном случае я поставлю ссылку на bugtracker в качестве ответа (если кто-то не придумает убедительного объяснения).

+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 
Смежные вопросы