Subject: Re: ACL bug in (tanh x) ?
From: Erik Naggum <>
Date: 2000/06/08
Newsgroups: comp.lang.lisp
Message-ID: <>

* Tim Bradshaw <>
| So they've got a test in to stop it dying through overflow, but the
| test assumes doubles, and it overflows with singles much earlier.
| (I guess the test is something like `if it's greater than this just
| return 1 coerced to the approprate type').

  This is all bogus.  (tanh x) is defined as (/ (sinh x) (cosh x)),
  and those are defined as (/ (+/- (exp x) (exp (- x))) 2), but (exp
  x) doesn't do a test, it bloats the value to double-float, computes
  the value, then abbreviates it to single-float, which fails for a
  whole truckload of double-floats, naturally.  The NaN-single result
  is simply that of of (/ infinity infinity).

  I don't have an equally good explanation for the 1.0 result, which I
  actually don't get on my Intel Pentium III running Linux.  *sigh*

  If this is not what you expected, please alter your expectations.