我正在将一个算法从C#移植到Ruby。该算法有一种方法可以返回有时溢出的int
。
private static int NextRandom(int n)
{
return 1234567890 * n + 12345;
}
该算法利用溢出来避免此函数返回的值超出范围。但是,Ruby的行为方式不同,它会自动将值转换为Bignum,这似乎没有限制......如何在Ruby中实现相同的目标?
答案 0 :(得分:6)
如果您想要一个数字在某个级别换行,您可能需要手动限制它:
def next_random(n)
(1234567890 * n + 12345) % 0x7FFFFFFF
end
您可以选择任何您想要的限制,该示例是32位签名。
我认为你无法将数值计算锁定到任意范围。
答案 1 :(得分:0)
一种可能的解决方案是编写一个包装器OverflowingInteger并按预期手动溢出。缺点是您需要将所有Integer转换为OverflowingInteger,至少在计算期间。