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)