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

Luc Maisonobe resolved MATH-1223.
---------------------------------
       Resolution: Fixed
    Fix Version/s: 3.6

Fixed in git repository, with commit e4b3ac8 in the master branch (4.X) and 
with commit 9e1b0ac in the MATH_3_X branch.

> Wrong splitting of huge double numbers
> --------------------------------------
>
>                 Key: MATH-1223
>                 URL: https://issues.apache.org/jira/browse/MATH-1223
>             Project: Commons Math
>          Issue Type: Bug
>    Affects Versions: 3.5
>            Reporter: Luc Maisonobe
>            Priority: Minor
>             Fix For: 4.0, 3.6
>
>
> In both MathArrays and FastMath, some computations on double are performed by 
> firt splitting double numbers in two numbers with about 26 bits.
> This splitting fails when the numbers are huge, even if they are still 
> representable and not infinite (the limit is about 1.0e300, eight orders of 
> magnitude below infinity).
> This can be seen by computing for example
> {code}
> FastMath.pow(FastMath.scalb(1.0, 500), 4);
> {code}
> The result is NaN whereas it should be +infinity.
> or by modifying test MathArraysTest.testLinearCombination1 and scaling down 
> first array elements by FastMath.scalb(a[i], -971) and scaling up the second 
> array elements by FastMath.scalb(b[i], +971), which should not change the 
> results. Here the result is a loss of precision because a safety check in 
> MathArrays.linearCombination falls back to naive implementation if the high 
> accuracy algorithm fails.
> The reason for the wrong splitting is an overflow when computing
> {code}
>         final int splitFactor = 0x8000001;
>         final double cd       = splitFactor * d; // <--- overflow
> {code}
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to