[ 
https://issues.apache.org/jira/browse/STATISTICS-94?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alex Herbert updated STATISTICS-94:
-----------------------------------
    Component/s: descriptive

> Support median and quantile for long datatype
> ---------------------------------------------
>
>                 Key: STATISTICS-94
>                 URL: https://issues.apache.org/jira/browse/STATISTICS-94
>             Project: Commons Statistics
>          Issue Type: Improvement
>          Components: descriptive
>            Reporter: Alex Herbert
>            Assignee: Alex Herbert
>            Priority: Minor
>
> Add support to the {{Median}} and {{Quantile}} class for the {{long}} 
> datatype. Current support is for {{double[]}} and {{{}int[]{}}}. Via 
> primitive conversion these support float, short, char and byte if an array is 
> appropriately converted. However {{long}} cannot be supported by primitive 
> conversion.
> The current median and quantile result is returned as a {{{}double{}}}. This 
> is not appropriate for the result on a long array as the closest 
> representable double may be outside the range of the input data if the data 
> have more than 53-bits in their integer representation. However if the 
> integer value is representable as less than 53-bits then the double will 
> provide a fractional part that cannot be returned if the result was a long. I 
> suggest using the {{StatisticResult}} for the return value allowing both 
> double and long representations:
> {code:java}
> StatisticResult r = Median.of(new long[] {Long.MIN_VALUE, Long.MAX_VALUE});
> r.getAsDouble();  // -0.5
> r.getAsLong();    // 0{code}
> h2. Rounding
> The current behaviour for {{StatisticResult}} is to return the integer 
> representations using the closest representation of the floating-point value 
> with ties towards positive infinity. So in the example above the median as a 
> long is 0.
> This behaviour could be changed with a rounding mode parameter. Unfortunately 
> the current rounding behaviour is not represented by any mode in 
> [java.math.RoundingMode (Javadoc JDK 
> 21)|https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/math/RoundingMode.html]
>  so this enum cannot be reused to set the mode. The rounding behaviour 
> matches [java.lang.Math.round(double) (Javadoc JDK 
> 21)|https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Math.html#round(double)].
>  The closest match is RoundingMode.HALF_UP when above zero and 
> RoundingMode.HALF_DOWN when below zero. If rounding to nearest is only 
> concerned with the 0.5 boundary then support for rounding could add modes for 
> rounding ties towards: negative infinity; positive infinity: or zero 
> (floating-point truncation).
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to