ruby - 避免在 Ruby 中从 Fixnum 自动转换为 Bignum

标签 ruby type-conversion

我正在将算法从 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/

相关文章:

ruby-on-rails - 带有 js 驱动程序的 capybara 不会生成选择选项

ruby-on-rails - 更新操作中的 Rails HABTM ActiveRecord::RecordNotFound

ruby-on-rails - Ruby on Rails - $ rails 服务器失败,因为找不到丑化器 gem

python - float 必须是字符串还是数字?

Python:在另一个数据框中的其他两列之间查找值

java - 如何将 int 转换为 float?

python - 将 float64 numpy 数组转换为不以科学计数法表示的 float

ruby - 获取调用者的调用者以获取 Ruby 异常

javascript - Rails 在 application.js 中找不到文件

string - 在 Swift 3 中将数据转换为字符串