中川です。 From: matz / netlab.co.jp (Yukihiro Matsumoto) Subject: [ruby-list:8660] Re: can't build 1.1b9_28 on digital-unix Date: Thu, 9 Jul 1998 16:36:31 +0900 > |> % ruby -e 'p 1<<1014' > |> % ruby -e 'p 2**1014' > > こちらも教えて下さいね. 1.1b9_29, 1.1b9_29+[ruby-list:8660]のパッチ、1.1b9_30 で同じ 結果になりました。 % ruby -e 'p 1<<1014' 175555970201398037864189960037990696642380564349834626243584063630598316216309534309285622385163609395625111210811907575838661883607828732903171318983861449587663958422720200465138886329341888788528401320395513446131006525725061407689368272012526598792334483090416306874948482361796597953940777665648656384 % ruby -e 'p 2**1014' 0 % ruby -e 'p (-1<<31)' -2147483648 % ruby -e 'p (-1<<32)' 0 % ruby -e 'p (-1<<1014)' -175555970201398037864189960037990696642380564349834626243584063630598316216309534309285622385163609395625111210811907575838661883607828732903171318983861449587663958422720200465138886329341888788528401320395513446131006525725061407689368272012526598792334483090416306874948482361796597953940777665648656384 b9_29+[ruby-list:8660]のパッチでは make test はこうなりました。 % make test /usr/users/nakagawa/ruby-1.1b9_29/sample/test.rb:488:in `/': integer -2102132736 too big to convert to `int'. (ArgumentError) from /usr/users/nakagawa/ruby-1.1b9_29/sample/test.rb:488 test failed bignum.c が > @@ -653,6 +653,6 @@ ではじかれるので > @@ -653,4 +653,4 @@ にして無理矢理あてたのでやりかたが悪かったかもしれません。 b9_30 の make test は $good = true; for i in 1000..1014 $good = false if ((1<<i) != (2**i)) end ok($good) で失敗してました。 # 正確なログを勤務先に忘れてきてしまったので # 明日報告します。すみません。 > これだとFIXNUMはintのサイズ(4バイト)になります.個人的には > 64 bitマシンではFIXNUMは8バイトの方が良いと思っているので, > 以下のパッチの方を推奨します. なるほど。 README.EXT.jp を読んで FIXNUM は環境に依存せず 31bit 整数だと 思いこんでました。失礼しました。 -- 中川 剛 / nakagawa / shizuokanet.ne.jp