Random 球拍中的随机数

Random 球拍中的随机数,random,functional-programming,racket,Random,Functional Programming,Racket,我试图生成从0到1的随机数,包括Racket中的边界0和1。直到现在我还没有找到解决办法。有什么好办法吗?使用random生成一个介于0.0和1.0之间的数字 要包含0.0和1.0,您可以使用: (define (r) (/ (random 4294967087) 4294967086.0)) 使用“随机”生成一个介于0.0和1.0之间的数字 要包含0.0和1.0,您可以使用: (define (r) (/ (random 4294967087) 429496708

我试图生成从0到1的随机数,包括Racket中的边界0和1。直到现在我还没有找到解决办法。有什么好办法吗?

使用random生成一个介于0.0和1.0之间的数字

要包含0.0和1.0,您可以使用:

(define (r)
  (/ (random 4294967087)
     4294967086.0))
使用“随机”生成一个介于0.0和1.0之间的数字

要包含0.0和1.0,您可以使用:

(define (r)
  (/ (random 4294967087)
     4294967086.0))
,你应该只使用random。确实,它会在开放范围0,1中生成一个数字,而不是您想要的封闭范围[0,1]。然而,我将提出一个由一些数字支持的论点,即差异是无关的

随机过程生成IEEE 754双精度浮点数。该格式在0之后表示的下一个最大数字约为4.94×10-324。如果我们假设随机确实会产生一个均匀分布在这个范围内的数字,那么这就意味着实际产生0.0的概率是4.94×10324中的一个!给你一点关于这个数字的上下文,这意味着即使你每秒生成10亿个随机数,平均也需要6.41×10306年才能生成0.0,甚至一次

在这个范围的另一端,情况就不那么严峻了,因为1和由双弗洛姆表示的下一个最小数字之间的差异要大得多:大约1.11×10-16。在这个范围的这一端,如果我们再次每秒生成10亿个随机数,那么在第一次生成1.0之前,平均“只”需要104天。然而,与您已经生成的大量数据相比,这仍然是微不足道的。事实上,您不太可能每秒生成10亿个随机数,因为在我的机器上生成10亿个随机数需要一分钟以上的时间

不要担心那些缺失的端点,因为它们真的不重要。只要调用random就可以了。

,你应该使用random。确实,它会在开放范围0,1中生成一个数字,而不是您想要的封闭范围[0,1]。然而,我将提出一个由一些数字支持的论点,即差异是无关的

随机过程生成IEEE 754双精度浮点数。该格式在0之后表示的下一个最大数字约为4.94×10-324。如果我们假设随机确实会产生一个均匀分布在这个范围内的数字,那么这就意味着实际产生0.0的概率是4.94×10324中的一个!给你一点关于这个数字的上下文,这意味着即使你每秒生成10亿个随机数,平均也需要6.41×10306年才能生成0.0,甚至一次

在这个范围的另一端,情况就不那么严峻了,因为1和由双弗洛姆表示的下一个最小数字之间的差异要大得多:大约1.11×10-16。在这个范围的这一端,如果我们再次每秒生成10亿个随机数,那么在第一次生成1.0之前,平均“只”需要104天。然而,与您已经生成的大量数据相比,这仍然是微不足道的。事实上,您不太可能每秒生成10亿个随机数,因为在我的机器上生成10亿个随机数需要一分钟以上的时间


不要担心那些缺失的端点,因为它们真的不重要。打随机电话就可以了。

这个问题还不清楚。包括边界是什么意思?如果在[0,1]上模拟均匀随机变量,则得到0或1的概率非常小。只需使用标准库RNG。通常认为随机数是浮点数,在0和1 0之间生成,0和1出现的概率是多少?如果答案不是0,那么您不再谈论[0,1]上的统一随机数,因此问题不清楚,因为尚未指定所需的分布。另一方面,如果答案是0,那么标准随机数就足够了。如果我对您的问题理解不正确,请澄清,@U880D就是这样指出的。通常的随机过程只返回一个值x,其中0在指定连续分布的情况下,每个值x应具有相同的概率。如果X是[0,1]上的连续随机变量,那么对于[0,1]中的任何特定X,我们有PrX=X=0。你从来没有回答过这个问题:你希望0和1出现的概率是多少?这个问题还不清楚。包括边界是什么意思?如果在[0,1]上模拟均匀随机变量,则获得eit的概率
她的0或1非常小。只需使用标准库RNG。通常认为随机数是浮点数,在0和1 0之间生成,0和1出现的概率是多少?如果答案不是0,那么您不再谈论[0,1]上的统一随机数,因此问题不清楚,因为尚未指定所需的分布。另一方面,如果答案是0,那么标准随机数就足够了。如果我对您的问题理解不正确,请澄清,@U880D就是这样指出的。通常的随机过程只返回一个值x,其中0在指定连续分布的情况下,每个值x应具有相同的概率。如果X是[0,1]上的连续随机变量,那么对于[0,1]中的任何特定X,我们有PrX=X=0。您从未回答过这样的问题:您希望0和1出现的概率是多少?random返回一个介于0和1之间的真实值,不包含0和1。我的问题是:如何创建一个返回随机实数x的函数,其中0random返回一个介于0和1之间的实数,而不返回0和1。我的问题是:如何创建一个返回随机实数x的函数,其中0这个参数似乎不能完全令人信服。文档表明,底层RNG具有52位内部状态。随机将其映射到0,1,但您可以清楚地将该状态映射到[0,1],这样就可以出现0和1。如果是这样的话,那么得到0和1的概率似乎至少是2^-52,这当然太小了,不值得担心,但并不像你的论点所说的那么罕见。仍然+1表示OP担心一些基本上没什么的事情。@johncolman我同意你的观点……我曾考虑尝试将Racket的PRNG实施细节引入的实际限制信息纳入此答案中,但最终我没有这样做。我认为提供真正精确的数字需要研究PRNG内部的工作方式,这是我不想做的。我考虑过根据州的大小在某个地方增加一条关于上限/下限的一次性线,也许我仍然应该这样做,但我不认为这会显著改变这个答案。在很多方面,数字本身并不重要。随机数的一个不可避免的缺陷是,存在特定的非零概率数。我看不出有什么合理的理由坚持让0和1加入这个缺陷出现的数字列表。@JohnColeman这是真的,尽管我认为解释可能不是最有用的框架。我认为一个更具激励性的框架是,随机性的一个缺陷是,范围内的一些数字实际上永远不会生成,而不是生成。0和1属于一组永远不会生成的数字的事实在考虑所有属于该集合的范围[0, 1 ]中的所有其他数字时意义不大。这个论点似乎并不完全令人信服。文档表明,底层RNG具有52位内部状态。随机将其映射到0,1,但您可以清楚地将该状态映射到[0,1],这样就可以出现0和1。如果是这样的话,那么得到0和1的概率似乎至少是2^-52,这当然太小了,不值得担心,但并不像你的论点所说的那么罕见。仍然+1表示OP担心一些基本上没什么的事情。@johncolman我同意你的观点……我曾考虑尝试将Racket的PRNG实施细节引入的实际限制信息纳入此答案中,但最终我没有这样做。我认为提供真正精确的数字需要研究PRNG内部的工作方式,这是我不想做的。我考虑过根据州的大小在某个地方增加一条关于上限/下限的一次性线,也许我仍然应该这样做,但我不认为这会显著改变这个答案。在很多方面,数字本身并不重要。随机数的一个不可避免的缺陷是,存在特定的非零概率数。我看不出有什么合理的理由坚持让0和1加入这个缺陷出现的数字列表。@JohnColeman这是真的,尽管我认为解释可能不是最有用的框架。我认为一个更具激励性的框架是,随机性的一个缺陷是,范围内的一些数字实际上永远不会生成,而不是生成。当你考虑到属于那个集合的范围[0, 1 ]中的所有其他数字时,0和1属于不真正生成的数字集合的事实就不那么有意义了。