我的问题很简单,julia语言中是否有通用的
它提供以下定时结果以及总内存分配情况:
现在将第一行更改为
Float
类型?例如对于Integer
类型,我们可以直接写Int
,在32位系统中它将被翻译为Int32
,在64位系统中则被翻译为Int64
。但是对于Float
类型,如下面的示例函数所示:function bb(n)
b = Array{Float64}(n)
b[1] = 0.9999
for i = 2:n
@inbounds b[i] = b[i-1] * 0.9999
end
println(b[n])
end
bb(10^3)
@time bb(10^3)
@time bb(10^8)
它提供以下定时结果以及总内存分配情况:
0.9048328935585562
0.9048328935585562
0.000100 seconds (135 allocations: 15.750 KB)
2.4703e-320
3.230642 seconds (14 allocations: 762.940 MB, 1.51% gc time)
现在将第一行更改为
b = Array{AbstractFloat}(n)
,然后查看极大的计时和内存分配:0.9048328935585562
0.9048328935585562
0.003564 seconds (2.13 k allocations: 46.953 KB)
2.4703e-320
351.068176 seconds (200.00 M allocations: 3.725 GB, 0.74% gc time)
我无法使用 b = Array{Float}(n)
,我的解决方案是使用这种不太优雅的记号 b = Array{typeof(1.0)}(n)
。
const Float = typeof(1.0)
,然后在之后使用Float,但标准是Float64(顺便说一下,const
是写typealias
的新方式)。此外,浮点数是一种折衷方案。如果您有特殊需求,则可能需要仔细考虑要使用哪种数字类型,Julia中有很多选择。 - Dan Getzconst Float = typeof(1.0)
添加到Julia核心中呢?这样人们就可以更轻松地编写Float
而不用考虑底层系统。 - AboAmmar