是否可以生成BigFloat
在间隔[0,1)中均匀分布的类型的随机数?
我的意思是,由于rand(BigFloat)
无法使用,因此似乎必须使用BigFloat(rand())
该结尾。但是,这对我来说并不令人满意,因为我们正在生成随机Float64
数,这些随机数BigFloats
基本上是通过“添加”一串零将其转换为零的,但从本质上讲,它们是Float64
随机数。它是否正确?如果是,是否有任何特殊的库来生成具有任意精度的随机数?
这个答案与@Dan Getz的答案相似,但是我更加确信它是统一的(老实说,我没有做过chi ^ 2测试来进行检查,绘图或其他操作)。@丹可能是,我不确定。该答案还考虑到可以调整的BigFloat精度水平。(反直觉上,某些BigFloat
可能比普通Float64
s精度低,等等)
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] 删除。
我来说两句