Uploaded image for project: 'Commons Math'
  1. Commons Math
  2. MATH-905

FastMath.[cosh, sinh] do not support the same range of values as the Math counterparts

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 3.0
    • 3.1
    • None
    • None

    Description

      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;

      Attachments

        1. MATH-905.diff
          5 kB
          Gilles Sadowski

        Issue Links

          Activity

            People

              Unassigned Unassigned
              tn Thomas Neidhart
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: