Simon PJ wrote: > Fpr the Revised Haskell 98 report, Russell O'Connor suggests: > =20 > | Also, I understand you are reluctant to make library changes,=20 > | but sinh and cosh can easily be defined in terms of exp > |=20 > | sinh x =3D (exp(x) - exp(-x))/2 > | cosh x =3D (exp(x) + exp(-x))/2 > |=20 > | (source: Calculus Third Edition by Michael Spivak, page 349,=20 > | or any decent calculus book) > |=20 > | I suggest removing sinh and cosh from the minimal complete=20 > | definition, and add the above defaults. > > This looks pretty reasonable to me. We should have default methods > for anything we can. > > Comments? No. As has been pointed out, this is a bad idea numerically because it will give the wrong answer for sinh x for very small values of x. As a matter of fact, you will also get the wrong answer for very large values of x, where exp(x) can overflow even though sinh x and cosh x don't, meaning you get an incorrect answer of positive infinity.
I suggest saying as little about the transcendental functions as possible, rather than forcing incorrect rules on the implementor. I imagine most Haskell implementors do not want to waste time writing their own transcendental function routines, but simply call out to one of the various high-quality C implementations. (Netlib has a good free one, for example.) This will probably produce better results than suggesting buggy code to the implementor. Technically, you would probably be able to define all the functions sinh/cosh/tanh/exp functions with reasonable precision in terms of expm1, defined mathematically as expm1(x) = exp(x) - 1. But please don't . . . _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell