LoginSignup
10

More than 5 years have passed since last update.

mrubyとISO Ruby (CRuby)の非互換部分(数値関連編)

Last updated at Posted at 2013-02-09

mruby の仕様はまだ未確定であり,仕様変更に伴い,下記の挙動も変更となる可能性が十分にあることに留意.

1 / 2 の結果

CRuby は 0.mruby は 0.5.
一般に,FixNum / FixNum の結果は,Float.

1 / 0 の結果

CRuby では ZeroDivisionError の発生. mruby では inf が返り raise は起きない.
ちなみに -1 / 0 の mruby での結果は -inf.

大きな数値の演算結果

mruby には BigNum が無いので,CRuby との非互換が生じる.

シフト演算子の挙動

p (1 << 32) - 1

CRuby では4294967295.mruby では RangeError が raise.ただし,mruby での RangeError の発生は,内部表現 mrb_int のビットサイズに依存する.(mrb_int のビットサイズが 33 ビット以上なら,上記演算で CRuby と同一の結果が得られる可能性もある)

加算乗算べき乗算などの挙動

p 2 ** 64 - 1

CRuby では 18446744073709551615.mruby では 1.844674407371e+19 など動作環境依存.

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10