Open
Description
Since the current mean implementation is calculated by summing all elements and then dividing it by the total number of elements, when working with smaller types (such as Float16) it's pretty easy to fall into an overflow when dealing with bigger arrays, as you can see in the following example:
julia> A = ones(Float16, (640, 640, 32))
640×640×32 Array{Float16, 3}:
julia> mean(A)
NaN16
julia> sum(A)
Inf16
julia> A = rand(Float16, 10^5)
100000-element Vector{Float16}:
0.838
0.638
0.694
0.0928
0.6875
0.3857
0.2573
0.7246
0.336
0.296
0.0332
0.6636
0.5386
⋮
0.998
0.1309
0.03027
0.1973
0.576
0.2158
0.617
0.4004
0.418
0.993
0.0381
0.505
julia> sum(A)
Float16(5.0e4)
julia> length(A)
100000
julia> mean(A)
Float16(0.0)
An easy solution when facing this is using Float32 instead, but I wanted to point out this issue when using Float16.
Metadata
Metadata
Assignees
Labels
No labels