mrubyとISO Ruby (CRuby)の非互換部分(数値関連編)
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 など動作環境依存.
Author And Source
この問題について(mrubyとISO Ruby (CRuby)の非互換部分(数値関連編)), 我々は、より多くの情報をここで見つけました https://qiita.com/monamour555/items/bcef9b41a5cc4670675a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .