代码之家  ›  专栏  ›  技术社区  ›  pdu

如何在两个浮点数之间的范围内最好地创建一个随机浮点数

  •  37
  • pdu  · 技术社区  · 16 年前

    我知道我可以用rand(max)生成随机浮动。我试着在一个范围内产生一个浮动,这应该不难。但是,例如rand(1.4512)返回0,因此rand不使用浮点数进行计算。现在我尝试了一个小把戏,把它转换成一个整数,然后在我想要的范围内随机化一个拟合数,再把它计算回一个浮点。。这是行不通的。

    我的问题是如何更好地做到这一点。如果没有更好的方法,为什么这个方法不起作用(也许对我来说太晚了,我应该在两小时前就开始睡觉了。整个过程的目的是为数据库记录计算一个“位置”字段,以便用户可以手动排序。我以前从未做过这样的事情,也许有人能给我一个更好的解决办法。

    def calculate_position(@elements, index)
        min = @elements[index].position
    
        if @elements[index + 1].nil?
            pos = min + 1
        else
            pos = min + (rand(@elements[index + 1].position * 10000000000) / 10000000000)
        end
    
        return pos
    end
    

    谢谢

    4 回复  |  直到 14 年前
        1
  •  49
  •   Josh    16 年前

    让我们回顾一下:

    rand()将生成一个(psuedo-)随机变量 在0和1之间浮动。

    rand(int)将生成一个 内部的。

    def range (min, max)
        rand * (max-min) + min
    end
    

    应该做得很好。

    更新:

    def testRange
        min = 1
        max = 100
    
        1_000_000.times { 
            result = range min, max
            print "ERROR" if result < min || result  > max
        }
    end
    

        2
  •  104
  •   Nathan Long    12 年前

    将一系列浮点数传递给 rand

    如果您想“在两个浮动之间的范围内创建一个随机浮动”,只需将一个浮动范围传递给 兰德 .

    rand(11.2...76.9)
    

    (使用Ruby 2.1进行测试)

        3
  •  13
  •   Sandor Bedo    12 年前

    在1.9和2.0中,您可以为rand提供范围参数:

    irb(main):001:0> 10.times { puts rand Math::E..Math::PI }
    3.0656267148715446
    2.7813979580609587
    2.7661725184200563
    2.9745784681934655
    2.852157154320737
    2.741063222095785
    2.992638029938756
    3.0713152547478866
    2.879739743508003
    2.7836491029737407
    => 10
    
        4
  •  3
  •   Harpastum    16 年前

    我认为最好的办法是使用rand()生成一个介于0和1之间的随机浮点数,然后用乘法设置范围,用加法设置偏移量:

    def float_rand(start_num, end_num=0)
      width = end_num-start_num
      return (rand*width)+start_num
    end
    

    注意:由于术语的顺序无关紧要,将end_num默认为0允许您使用float_rand(x)获得0到x之间的随机浮点。

    推荐文章