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