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

Col*_*ers 3 floating-point types julia type-stability

在朱莉娅,我有这样的功能:

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

该函数是类型稳定的,因此可以快速运行.但是,我希望将该函数包含在一个包中以进行常规分发,包括32位计算机.这里的最佳做法是什么?我应该为其编写另一个版本的函数Float32(如果我有很多这样的函数,这可能会很烦人)?我可以使用FloatingPoint输入类型吗?如果我这样做,我怎么保证功能型保持稳定,因为0.0和1.0有Float64,而x / c可能是Float32或Float16?也许我可以使用类型参数,例如T<:FloatingPoint然后让x::T和c::T,然后在函数体中使用0.0::T和1.0::T确保它是类型稳定的?

这里的任何指导将不胜感激.

mlu*_*bin 11

在one与zero这里的功能是有用的:

function f(x, c)
    if x <= 0
        return zero(x)
    elseif x <= c
        return x/c
    else
        return one(x)
    end
end
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)