Description
There has already been some discussion about the implementation of mean
(and functions relying on it) so far, and there are still related issues open.
This issue concerns the behavior of mean
with respect to types defined in other packages.
An example case is FixedPointNumbers.jl, but this issue should not be specific to it.
#25 changed the behavior of mean
with FixedPoint
.
Briefly, it accumulates the sum with the intermediate type Float32
, which was formerly Float64
.
Therefore, FixedPointNumbers
has added a workaround method definitions as below (cf. JuliaMath/FixedPointNumbers.jl#183):
Statistics._mean_promote(x::Real, y::FixedPoint) = Float64(y)
The workaround has worked well so far, but we do not know about that in the future.
The lack of a public API corresponding to _mean_promote
is a real problem, especially since Statistics.jl is now an upgradable stdlib.
Ideally, it would be better to have the ability to promote types in three separate steps: initialization, body (i.e., the current _mean_promote
), and finalization.
Currently, in the accumulation, the inefficient conversion of fixed-point numbers to floating-point numbers runs.
We should be able to accumulate the sum in fixed-point numbers and finally convert it to a useful floating-point number (Float64
).