Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Public API corresponding to _mean_promote #165

Open
kimikage opened this issue Apr 7, 2024 · 1 comment
Open

Public API corresponding to _mean_promote #165

kimikage opened this issue Apr 7, 2024 · 1 comment

Comments

@kimikage
Copy link

kimikage commented Apr 7, 2024

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).

@kimikage
Copy link
Author

kimikage commented Apr 7, 2024

Of course, there is also the option of extending public APIs, such as mean.
But that will not work well with collections containing different types defined in different packages.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant