Julia 为什么';使用AbstractFloat工作?

Julia 为什么';使用AbstractFloat工作?,julia,Julia,在Julia 0.4.0中,当我尝试 rand(AbstractFloat, 1) 获得以下误差: ERROR: MethodError: `rand` has no method matching rand(::MersenneTwister, ::Type{AbstractFloat}) 我必须明确地说Float32或Float64才能使rand起作用,这背后有什么原因吗?或者只是因为语言相对较新,还没有在基础中定义相关的方法?one与rand不同。 使用one(AbstractFloa

在Julia 0.4.0中,当我尝试

rand(AbstractFloat, 1)
获得以下误差:

ERROR: MethodError: `rand` has no method matching rand(::MersenneTwister,
::Type{AbstractFloat})

我必须明确地说
Float32
Float64
才能使
rand
起作用,这背后有什么原因吗?或者只是因为语言相对较新,还没有在基础中定义相关的方法?

one
rand
不同。 使用
one(AbstractFloat)
时,所有输出都是“相同的”:

使用
rand
时,情况并非如此:

julia> rand(srand(1), Float64)
0.23603334566204692

julia> rand(srand(1), Float32)
0.5479944f0

julia> rand(srand(1), Float32) == rand(srand(1), Float64)
false
这意味着,如果
rand
的行为类似于
one
,那么在两台不同的机器上(例如,一台是x86,另一台是x64),使用相同的种子可能会得到两个不同的结果。请查看中的代码:


@内联rand{TJulia不知道您喜欢
BigFloat
Float16
Float32
Float64
中的哪种类型。但例如
one(AbstractFloat)
根据系统的不同,给出一个
Float32
Float64
对象。难道
rand
不应该有相同的行为吗?很好的情况,在我看来,朱莉娅最好在类似的情况下,像上面那样表现相同。因为
rand(Float64)
实际上并不涵盖
Float64
值的整个范围,但是[0,1)间隔与
Int
系列不同,将其定义为抽象行为并扩展到
AbstractFloat
。好的观点@taiki非常合理:)谢谢。
julia> rand(srand(1), Float64)
0.23603334566204692

julia> rand(srand(1), Float32)
0.5479944f0

julia> rand(srand(1), Float32) == rand(srand(1), Float64)
false