[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dennou-ruby:000273] int32 + bignum
ごとけんです
Int32とFixnumやBignumの演算結果の型はなんだと思いますか??
* 最大長の短い方に合わせる # 今はこれを試してます
(1) IntXX[Integer[intXX] op Integer[other]] # 今の仕様
(2) IntXX[intXX op IntXX[other]] # 別の候補
* 最大長の長い方に合わせる
int16 + 1 がFixintになるのでうれしくないと思う
* abs を使った比較
(int16[0] + 2**14).type == Int16
(int16[0] + 2**15).type == Fixint # MAXINT16 == 2**15-1
となるのでオペランドの型だけから判断がつかない
なお Klass[] はコンストラクタです。
もし最大長の短い方にするなら(1)と(2)のどちらがいいですか??
両者はレンジチェックのタイミングに違いがあり、(1)は演算後に
のみチェック、(2)は演算前にもチェックします(速度にはそれほど
差は出ません)。例えば i = 2**15 のときの i-int16 の挙動が違
います。(2)の場合、Int16[i] の時点でOverflowになりますが、
(1)なら int16 < 1 のときにOverflowです。どちらかと言えば(1)
がFortranやCに似てると言えるかも知れません。
-- gotoken