在Ruby中强制int64溢出

时间:2015-07-09 13:57:26

标签: ruby

我正在将一个C ++库移植到Ruby,并且我无法复制int64溢出行为。

如果我在bash(或c ++)上进行这种乘法,我得到一个负数,因为如果2^63 value

> let "iv=1436440203*833471*380*1436440203" ; echo $iv
-4353333299339738780

但Ruby将其转换为BigNumber并给出预期结果:

[1] pry(main)> 1436440203*833471*380*1436440203
=> 653505419248345501939646820
[2] pry(main)> (1436440203*833471*380*1436440203).class
=> Bignum

如何强制Ruby复制C ++ / bash行为?

另外,我已经看过这个问题(Emulating int64 overflows in Ruby),我觉得它不一样。

执行mod操作符也不会给我一个否定结果

[3] pry(main)> (1436440203*833471*380*1436440203) % 2**64
=> 14093410774369812836

[4] pry(main)> (1436440203*833471*380*1436440203) % 2**63
=> 4870038737515037028

0 个答案:

没有答案