【发布时间】:2014-09-22 18:57:10
【问题描述】:
我正在使用一种使用随机数的算法。如果能够最大化我可以获得的随机性,同时保持数字是一个性能合理的整数,那就太好了,所以理想情况下它们应该在Fixnum::MIN .. Fixnum::MAX 的范围内,但0..Fixnum::MAX 也应该没问题。
哦,等等。这些常量实际上并不存在。所以当你读到Random.rand returns a float unless you pass it an integer argument 时,唯一明显的做法就是resort to terrible hacks like these。
在 Ruby 中是否有更惯用的方法来获取随机整数,或者如果我想要这种能力,Yukihiro 是否只是希望我的代码变得丑陋并重复可疑的整数大小幂运算?
【问题讨论】:
-
你的意思是一个无限大小的随机整数?这几乎从来都不是你真正需要的。你的实际上限是多少?
-
@RobertHarvey - 这正是教科书实现在该算法中所要求的:一堆元素获得随机权重,它们相互比较的原因(没有其他数学是在这些对象上执行)。它们可能是我关心的所有字符串,但如果它们很快就会很好。碰撞不会影响算法的正确性,偶尔的碰撞只会对性能产生微不足道的影响,但同时实际上没有必要使随机可比较池比必要的小,并且可能涉及 ALL_YOUR_RAM 数量的元素。跨度>
-
那么你的实际上限是多少?它不可能是无限的。
-
我怀疑这里的实际答案是“使用可怕的黑客,继续生活。”
-
@daremkd AFAIK,Kernel#rand 并不总是将 Range 对象作为参数,但它现在似乎可以在 Ruby 2.1.2 上使用。我的回答略有不同,但您的范围似乎在数百万次试验中运行良好。测试代码见this gist。