【问题标题】:Negative random numbers负随机数
【发布时间】:2011-12-17 11:08:42
【问题描述】:

我知道如何使用 Rails 生成数字,但不知道如何生成负数

prng.rand(1..6) for random of [1, 2, 3, 4, 5, 6]

Random doc 说你会得到一个 ArgumentError。

【问题讨论】:

标签: ruby random generator


【解决方案1】:

假设您想生成一个介于 a 和 b 之间的数字,您始终可以使用以下公式:

randomNum = (b-a)*prng.rand + a

因此,例如,如果您想要一个介于 -8 和 +7 之间的数字,则 a=-8 和 b=7 并且您的代码将是

randomNum = (7-(-8))*prng.rand + (-8)

相当于

randomNum=15*prng.rand - 8

【讨论】:

  • randomNum = (7-(-8))*prng.rand(0..1) + (-8) 这不会产生 50% 的机会吗? (当你有 0 和 prng.rand(0..1)
  • @Awake 是的,你是对的,使用 prng.rand 代替生成 0 和 1 之间的随机统一数
【解决方案2】:

假设您要生成介于 -1 到 -5 之间的负数

你可以这样做:

rand(-5..-1)

它会生成-5到-1之间的随机数

【讨论】:

  • 唯一的 ruby​​esque 答案...也许可以添加,因为这是可能的 ruby​​ 版本。
【解决方案3】:

你把正随机数乘以-1怎么样

【讨论】:

  • 是的,但是如果我执行 prng.rand(-10..10),你会得到 100% 的负数我想要做的是正数/负数之间的平衡。但这不应该因为 ArgumentError no ?
  • 然后去 0...10 减去 20!
【解决方案4】:
def rand(a, b)
  return Random.rand(b - a + 1) + a 
end
rand(-3, 5)

【讨论】:

  • 如果 a 和 b 都是负数,这不会失败吗?
  • 嗯,我刚刚用 rand(-9, -5) 进行了测试,它似乎还可以正常工作。只需确保 -9 是第一个,因为它是两者中较小的一个。
  • 如果你做 rand (-9, -5) 你会得到 Random.rand(-5-(-9)+1)+(-9) = Random.rand(5)-9 。 .. 如果 rand 返回 5 而不是 5-9=-4 并且不在 (-9, -5) 的范围内
  • 好的,有没有办法解决这个问题?
  • Random.rand(5) 从 0-4 返回一些东西,所以它不能返回 5 :)
【解决方案5】:

我需要生成一个随机整数,1 或 -1,我使用了这个:

prng = Random.new(1)    
prng.rand > 0.5 ? 1 : -1

【讨论】:

    猜你喜欢
    • 2011-04-19
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 2018-03-10
    • 1970-01-01
    相关资源
    最近更新 更多