You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Gilles (JIRA)" <ji...@apache.org> on 2012/11/23 15:28:58 UTC
[jira] [Updated] (MATH-905) FastMath.[cosh, sinh] do not support
the same range of values as the Math counterparts
[ https://issues.apache.org/jira/browse/MATH-905?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Gilles updated MATH-905:
------------------------
Attachment: MATH-905.diff
Here is a patch for this issue.
The additional test methods "testMath905..." explore the range where the previous code would overflow (around [709, 710] and [-710, -709]).
Please note that the tolerance for those tests had to be increased to "3" (whereas it was "2" for the range [-30, 30]).
OK to commit?
> FastMath.[cosh, sinh] do not support the same range of values as the Math counterparts
> --------------------------------------------------------------------------------------
>
> Key: MATH-905
> URL: https://issues.apache.org/jira/browse/MATH-905
> Project: Commons Math
> Issue Type: Bug
> Affects Versions: 3.0
> Reporter: Thomas Neidhart
> Fix For: 3.1
>
> Attachments: MATH-905.diff
>
>
> As reported by Jeff Hain:
> cosh(double) and sinh(double):
> Math.cosh(709.783) = 8.991046692770538E307
> FastMath.cosh(709.783) = Infinity
> Math.sinh(709.783) = 8.991046692770538E307
> FastMath.sinh(709.783) = Infinity
> ===> This is due to using exp( x )/2 for values of |x|
> above 20: the result sometimes should not overflow,
> but exp( x ) does, so we end up with some infinity.
> ===> for values of |x| >= StrictMath.log(Double.MAX_VALUE),
> exp will overflow, so you need to use that instead:
> for x positive:
> double t = exp(x*0.5);
> return (0.5*t)*t;
> for x negative:
> double t = exp(-x*0.5);
> return (-0.5*t)*t;
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira