gpt4 book ai didi

language-agnostic - 将 [0,1] 区间扩展为 [a,b] 的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-01 10:13:45 25 4
gpt4 key购买 nike

许多随机数生成器返回 0 到 1 之间的浮点数。

获取 的最佳和正确方法是什么?整数 在 a 和 b 之间?

最佳答案

在 B-A+1 个 bin 中划分区间 [0,1]

示例 A=2, B=5

        [----+----+----+----]
0 1/4 1/2 3/4 1
Maps to 2 3 4 5

公式的问题
 Int (Rnd() * (B-A+1)) + A

是您的 Rnd() 生成间隔在两侧都是封闭的,因此 0 和 1 都是可能的输出,并且当 Rnd() 恰好为 1 时,公式给出 6。

在真正的随机分布(非伪)中,1 的概率为零。我认为编写如下程序是足够安全的:
 r=Rnd()
if r equal 1
MyInt = B
else
MyInt = Int(r * (B-A+1)) + A
endif

编辑

只是在 Mathematica 中的快速测试:

定义我们的函数:
f[a_, b_] :=  If[(r = RandomReal[]) == 1, b, IntegerPart[r (b - a + 1)] + a]

在 [1,100] 中构建一个包含 3 个 10^5 数字的表:
table = SortBy[Tally[Table[f[1, 100], {300000}]], First]

检查最小值和最大值:
In[137]:= {Max[First /@ table], Min[First /@ table]}

Out[137]= {100, 1}

让我们看看分布:
BarChart[Last /@ SortBy[Tally[Table[f[1, 100], {300000}]], First],
ChartStyle -> "DarkRainbow"]

alt text

关于language-agnostic - 将 [0,1] 区间扩展为 [a,b] 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3036208/

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