【问题标题】:How to generate a a really big Random integer in Ruby?如何在 Ruby 中生成一个非常大的随机整数?
【发布时间】:2013-08-02 19:38:07
【问题描述】:

我想在 ruby​​ 中生成一个 64 位整数。我知道在 Java 中你很长,但我不确定你会如何在 Ruby 中做到这一点。另外,64位数字中有多少个字符?这是我所说的一个例子...... 123456789999。

@num = Random.rand(9000) + Random.rand(9000) + Random.rand(9000)

但我认为这是非常低效的,必须有一种更简单、更简洁的方法来做到这一点。

谢谢!

【问题讨论】:

  • 您通常只想在程序开始时注入一次种子。
  • 所以你想生成一个介于 -2^64 和 2^64 - 1 之间的随机数?或者你想生成一个 X 位数的随机数。
  • 2**64 我认为可行。
  • 随机数通常有上下文。这是为了什么?例如,如果您想生成密钥或秘密,SecureRandom.random_number( 2**64 ) 将是合适的。
  • "64 位数字中有多少个字符?"这是一个有问题的问题。字符数与位宽没有任何特定的相关性。另外,它取决于基数。您可以将数字 15 作为 存储为 64 位整数,然后前 60 位将是 0,后 4 位将是 1,但以十进制表示只有两个字符。以十六进制表示,只有一个字符 (F)。

标签: ruby random integer


【解决方案1】:

rand 可以将范围作为参数:

p a = rand(2**32..2**64-1) # => 11093913376345012184
puts a.class #=> Bignum

From the doc:Bignum 对象保存的整数超出了 Fixnum 的范围。当整数计算会溢出 Fixnum 时,会自动创建 Bignum 对象。当涉及 B​​ignum 对象的计算返回适合 Fixnum 的结果时,该结果会自动转换...

【讨论】:

    猜你喜欢
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 2019-02-09
    • 2017-09-07
    • 2015-01-28
    • 1970-01-01
    • 2010-09-07
    相关资源
    最近更新 更多