我正在将算法从 C# 移植到 Ruby。该算法有一个方法返回一个有时会溢出的 int
。
private static int NextRandom(int n)
{
return 1234567890 * n + 12345;
}
该算法利用溢出来避免此函数返回的值超出范围。但是,Ruby 的行为不同,它会自动将值转换为似乎没有限制的 Bignum...我如何在 Ruby 中实现相同的目标?
最佳答案
如果你想让一个数字在某个级别换行,你可能需要手动限制它:
def next_random(n)
(1234567890 * n + 12345) % 0x7FFFFFFF
end
您可以选择任何您想要的限制,该示例是 32 位签名的。
我认为您无法将数值计算锁定在任意范围内。
关于ruby - 避免在 Ruby 中从 Fixnum 自动转换为 Bignum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6494514/