我有一个例程可以返回任何 FloatingPoint 类型的数组(或者实际上是任何数字类型,但它适用于浮点)。它计算连分数的收敛性。我的问题是我希望编译器为每个返回类型优化它,例如 Float64、BigFloat 等,而不是使用通用代码。
function floatconvergents(a::Vector{Int}, n_quotients::Int, t::Type)
r = Array(t, n_quotients)
u = Array(t, n_quotients)
v = Array(t, n_quotients)
r[1],u[1],v[1] = a[1],0,1
for k=2:n_quotients
u[k] = 1 / (a[k] + u[k-1])
r[k] = (a[k]*r[k-1] + v[k-1]) * u[k]
v[k] = r[k-1] * u[k]
end
return r
end
对我来说似乎可行的唯一解决方案是将结果数组作为参数传递并使其成为参数函数
function floatconvergents!{T<:FloatingPoint}(a::Vector{Int}, n_quotients::Int, r::Vector{T})
我看到的唯一问题是,除了指定其类型之外,没有理由将结果数组作为参数提供。这似乎不是“正确”的事情。