gpt4 book ai didi

ruby - 基于 ANU 量子随机数服务器的随机数

转载 作者:数据小太阳 更新时间:2023-10-29 08:45:54 25 4
gpt4 key购买 nike

有人要求我使用 ANU Quantum Random Numbers Service创建随机数并仅使用 Random.rand 作为后备。

 module QRandom

def next
RestClient.get('http://qrng.anu.edu.au/API/jsonI.php?type=uint16&length=1'){ |response, request, result, &block|
case response.code
when 200
_json=JSON.parse(response)
if _json["success"]==true && _json["data"]
_json["data"].first || Random.rand(65535)
else
Random.rand(65535) #fallback
end
else
puts response #log problem
Random.rand(65535) #fallback
end
}
end

end

他们的 API服务给了我一个介于 0-65535 之间的数字。为了为更大的集合创建随机数,例如 0-99999 之间的随机数,我必须执行以下操作:

(QRandom.next.to_f*(99999.to_f/65535)).round 

我认为这是错误的做法,因为如果我要使用从 0-3 创建数字并将它们转置到 0-9999 空间的服务(无论是否为量子),我可以选择 4 个数字我总是得到。如何使用生成 0-65535 之间数字的服务为更大的数字集创建随机数?

最佳答案

由于 65535 在二进制中是 1111111111111111,因此您可以将随机数服务器视为随机位的来源。它以 16 位为单位向您提供位这一事实并不重要,因为您可以发出多个请求,也可以忽略响应中的某些位。

因此,在执行该抽象之后,我们现在拥有的是一项服务,可在您需要时为您提供随机位(0 或 1)。

计算出您需要多少位随机性。由于你想要一个0到99999之间的数,你只需要找到一个全为1且大于或等于99999的二进制数。十进制99999等于二进制11000011010011111,它有17位长,所以你需要17一些随机性。

现在从服务中获取 17 位随机数,并将它们组装成一个二进制数。该数字将在 0 和 2**17-1 (131071) 之间,并且会均匀分布。如果随机数恰好大于 99999,则丢弃您拥有的位并重试。 (需要重试的概率应小于50%。)

最终你会得到一个 0 到 99999 之间的数字,这个算法应该给你一个完全均匀的分布。

关于ruby - 基于 ANU 量子随机数服务器的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28748815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com