随机BigFloats朱莉娅

达皮亚斯

是否可以生成BigFloat在间隔[0,1)中均匀分布类型的随机数

我的意思是,由于rand(BigFloat)无法使用,因此似乎必须使用BigFloat(rand())该结尾。但是,这对我来说并不令人满意,因为我们正在生成随机Float64数,这些随机BigFloats基本上是通过“添加”一串零将其转换为零的,但从本质上讲,它们是Float64随机数。它是否正确?如果是,是否有任何特殊的库来生成具有任意精度的随机数?

林登·怀特

这个答案与@Dan Getz的答案相似,但是我更加确信它是统一的(老实说,我没有做过chi ^ 2测试来进行检查,绘图或其他操作)。@丹可能是,我不确定。该答案还考虑到可以调整的BigFloat精度水平。(反直觉上,某些BigFloat可能比普通Float64s精度低,等等)

Base.rand(::Type{BigFloat}) =  get(tryparse(BigFloat, "0." .* join(rand(['0','1'], precision(BigFloat))), 2))

例:

julia> rand(BigFloat)
5.775971375531676786209502831045802088939348666270278366043732289527176430673822e-02

julia> rand(BigFloat)
3.061194516436133765062723761241255852372302334681778915000436918803432772307184e-01

julia> rand(BigFloat)
     1.39772524343615633719535808470123032232713877796596771875414945796651457395665e-01

概念是BigFloat具有已知的精度,因此我们应该生成那么多随机位。当我们在[0,1)之间生成时,我们知道base-2表示是0.某种东西。因此,我们在base-2中生成了字符串,并在base 2中对其进行了解析。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章