Description
openedon Mar 5, 2014
As discussed on the mailing list, I was working on a new vecnorm(x,p)
function (generalizing and replacing normfro
) which computes a p-norm of any iterable container as if it were a vector. I noticed that it is quite tricky to make it type stable, and that in fact our current norm
function is not type-stable
julia> norm(Float32[0,1],0)
1
julia> norm(Float32[0,1],2)
1.0f0
julia> norm(Int32[0,1],2)
1.0
julia> norm(Int32[0,1],1)
1
julia> norm(Int32[0,1],3)
1.0
julia> norm(Int32[0,1],0)
1
Obviously, the "0-norm" needs to be promoted to a floating-point type. Similarly for the 1-norm of integer arrays.
(What's not as obvious to me is whether the norm of a Float32
array should be Float32
. I'd much rather accumulate the sum in double precision, and I don't see the point of returning a single-precision result. However, since sum
of a Float32
array is also single-precision, I suppose doing the same thing for norm
makes a certain amount of sense.)
cc: @toivoh