Skip to content

Fix #314: tanh incorrect for large args

For args with a real part greater than about 177, cmucl returns #c(1.0 -1.0) for (tanh #c(200d0 -200d0)). The correct answer is #C(1.0 -0.0). We were incorrectly computing the imaginary part as the sign of the imaginary part of the arg. However, we were supposed to copy the sign of the imaginary part of the arg to 0.

While we're at it, remove the reader code selecting different ways to compute (asinh most-positive-double-float). Fdlibm should produce a correct value here.

Add a test for this as well.

Merge request reports