2

任意の 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})

これに関する唯一の問題は、型を指定する以外に、結果の配列を引数として指定する理由がないことです。それは「正しい」ことのようには思えません。

4

1 に答える 1