使用浮点输入时,在 Julia 中键入稳定函数以进行一般分发

Type stable functions in Julia for general distribution when working with floating point inputs

在 Julia 中,我有一个这样的函数:

function f(x::Float64, c::Float64)
    if x <= 0
        return(0.0)
    elseif x <= c
        return(x / c)
    else
        return(1.0)
    end
end

该函数是类型稳定的,因此 运行 很快。但是,我想将该函数包含在用于一般分发的包中,包括 32 位机器。这里的最佳做法是什么?我是否应该为 Float32 编写另一个版本的函数(如果我有很多这样的函数,这会很烦人)?我可以使用 FloatingPoint 作为输入类型吗?如果我这样做,我如何确保函数保持类型稳定,因为 0.01.0Float64,而 x / c 可能是 Float32Float16?也许我可以使用类型参数,例如T<:FloatingPoint 然后让 x::Tc::T,然后在函数体中使用 0.0::T1.0::T 以确保它是类型稳定的?

如有任何指导,我们将不胜感激。

onezero 函数在这里很有用:

function f(x, c)
    if x <= 0
        return zero(x)
    elseif x <= c
        return x/c
    else
        return one(x)
    end
end

这个版本对输入类型有点严格:

function f{T<:FloatingPoint}(x::T, c::T)
    if x <= 0
        return zero(T)
    elseif x <= c
        return x/c
    else
        return one(T)
    end
end