From: Hisayasu Nakao Date: 2001-03-12T13:54:19+09:00 Subject: [ruby-dev:12425] bignum % の結果が負数になることがある 最近、ruby-1.6.2を使い出したばかりの中尾です。 NetBSD-1.4.2(または1.5)/i386上で、 56849318315 % 2851170354 が正しく計算されない(-1617885707とprintされる)ので、 困っています。 rubyは、ruby-1.6.2.tar.gzをtar zxfで展開して、 cd ruby-1.6.2 CFLAGS="-m486 -O2" ./configure; make; make install でbuildしました。 いろいろ調べたところ、x % yの評価で、 x>2^32かつyが[2^31〜(2^32-1)]の範囲 かつ(x % y)が[2^31〜(y-1)]の範囲 の場合、結果が負数で表示されてしまいます。 ちなみに、win32(cygwin版)では、56849318315 % 2851170354は 正しく表示されます。 [プログラム例] bash-2.03$ cat ./nn.rb #!/usr/local/bin/ruby -K ###### ruby 1.6.2 on NetBSD-1.4.2/i386 BUG ??? ###### w=56849318315 % 2851170354 print("56849318315 % 2851170354=",w,"\n") v=56849318315-2851170354*(56849318315/2851170354) print("56849318315-2851170354*(56849318315/2851170354)=",v,"\n") [実行例(NetBSD-1.4.2/i386)] bash-2.03$ ./nn.rb 56849318315 % 2851170354=-1617885707 # 負数になったぞ。 56849318315-2851170354*(56849318315/2851170354)=2677081589 # 正解 -- ---------------------------------------------------------------- PB本)パーソナル開発統括部)インターネットビジネス企画開発部 情報化推進プロジェクト 中尾 寿康