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

Alex Herbert resolved NUMBERS-204.
----------------------------------
    Fix Version/s: 1.2
       Resolution: Fixed

Added in commit:

c8457580f049c7e8ad7507651ccd9bf8ff05aca5

 

> Sum class may incorrectly sum products if their round-off is sub-normal
> -----------------------------------------------------------------------
>
>                 Key: NUMBERS-204
>                 URL: https://issues.apache.org/jira/browse/NUMBERS-204
>             Project: Commons Numbers
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.1
>            Reporter: Alex Herbert
>            Assignee: Alex Herbert
>            Priority: Trivial
>             Fix For: 1.2
>
>
> The Sum class can be used to compute a sum of products with extended 
> precision by computing the round-off component of each product and using that 
> in the sum.
> When the round-off is sub-normal this computation may be incorrect as 
> intermediate sub-normal numbers may lose significant bits.
> This test currently fails due to a 1 ULP rounding error in computing the 
> round-off. This is combined with the exact product to create an incorrect sum.
> {code:java}
> @ParameterizedTest
> @CsvSource({
>     // Round-off == 0.0
>     "-2.73551683292218E-154, -1.0861547555023299E-154",
>     // Round-off = 4.9E-324
>     "1.4134286753429383E-154, -4.1395762189346144E-154",
> })
> void testSumOfProduct_tiny(double x, double y) {
>     final Sum s = Sum.create();
>     s.addProduct(x, y);
>     Assertions.assertEquals(x * y, s.getAsDouble());
> }
> {code}
> The productLow method currently uses downscaling if the arguments are too 
> large for the computation. Applying upscaling to the arguments so the product 
> and its round-off are both normal numbers corrects this rounding error.



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

Reply via email to