Julia 为什么';使用AbstractFloat工作?
在Julia 0.4.0中,当我尝试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
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