単項演算子 - に関するちょっとしたメモ

[ruby-list:48703] 単項演算子 - に関する違和感 という投稿に、ちと目が止まった。

気になったので、Ruby, Perl, Python, PHP, GNU bash, GNU bc にて、「-4%3」「(-4)%3」「-(4%3)」を、とりいそぎ調べてみた。

Ruby Perl Python PHP GNU bash GNU bc
$ irb $ perl -ne 'print eval($_)."\n"' $ python $ php -a $ echo $(( )) $ bc
-4%3 2 2 2 -1 2 -1
(-4)%3 2 2 2 -1 2 -1
-(4%3) -1 -1 -1 -1 -1 -1

Ruby については、 znz さん id:znz から Class: Numeric (Ruby 1.9.3) を教えてもらいました。ありがとうございます。

ぐぐってみると、こんなプログラムはいやだ: 負の剰余 - bkブログ に、C (GCC 3.3.5)、Java (Sun JDK 1.5.0_05), GNU Emacs 22.0.50.2 の結果がありました。

a \equiv b\quad \pmod n での b の正負を、na かのどちらのそれに合わせるかですね。ぶっちゃけ、|a| \equiv b\quad \pmod{|n|} となるような b\quad (> 0) を取ったときに、b の結果が処理系に依って違ったら、大変なことになるわけです(笑