From: Go Nakagawa Date: 1998-07-09T00:53:16+09:00 Subject: [ruby-list:8654] Re: can't build 1.1b9_28 on digital-unix 中川です。 From: matz@netlab.co.jp (Yukihiro Matsumoto) Subject: [ruby-list:8647] Re: can't build 1.1b9_28 on digital-unix Date: Wed, 8 Jul 1998 17:38:41 +0900 > まつもと ゆきひろです > できれば,以下の結果をそれぞれ教えて下さい. > > % ruby -e 'p 1<<1014' > % ruby -e 'p 2**1014' 直接の回答にはなりませんが、いままで調べた結果を報告します。 o その1 -- FIXNUM_{MAX|MIN} がおかしい? for i in 0..100 print ("i=", i, " ", (1<>1) + #define FIXNUM_MIN RSHIFT((int)INT_MIN,1) + #else #define FIXNUM_MAX (LONG_MAX>>1) #define FIXNUM_MIN RSHIFT((long)LONG_MIN,1) + #endif #define FIXNUM_FLAG 0x01 #define INT2FIX(i) (VALUE)(((long)(i))<<1 | FIXNUM_FLAG) -------- ここまで o その2 -- lshift がおかしい? FIXNUM_MIN の処理が自信ないので確認しようとしました。 for i in 0..100 print ("i=", i, " ", (-1< (sizeof(VALUE)*CHAR_BIT-1) || (unsigned)val>>(sizeof(VALUE)*CHAR_BIT-1-width) > 0) { return big_lshift(int2big(val), y); } がうまくいってないみたいです。 パッチありません。面目ないっす。 -1<<30 == -1073741824 が Fixnum というのは x86 な環境と結果が 違うのですが追いきれてません。 o その3 -- pow がおかしい? for i in 0..100 print ("i=", i, " ", (2**i).type, " ", (2**i),"\n") end の結果はこうなりました。 (一部略) i=28 Fixnum 268435456 i=29 Fixnum 536870912 i=30 Bignum 1073741824 i=31 Bignum 2147483648 i=32 Fixnum 0 i=33 Fixnum 0 i=34 Fixnum 0 (以下おなじ) んー、やっぱり変。 原因は追いきれてません。面目ないっす。 -- 中川 剛 / nakagawa@shizuokanet.ne.jp