2 Copyright © 1995-2003, The AROS Development Team. All rights reserved.
6 #include "mathtrans_intern.h"
10 Calculate the hyperbolic cosine of the ffp number
13 Motorola fast floating point number
17 negative : 0 (not possible)
18 overflow : result too big for ffp-number
30 cosh(x) = (1/2)*( e^x + e^(-x) )
32 cosh( |x| >= 44 ) = infinity;
33 cosh( |x| >= 9 ) = (1/2) * (e^x);
39 AROS_LH1(float, SPCosh
,
40 AROS_LHA(float, fnum1
, D0
),
41 struct Library
*, MathTransBase
, 11, MathTrans
49 /* cosh(-x) = cosh(x) */
50 fnum1
&= ( FFPMantisse_Mask
+ FFPExponent_Mask
);
54 if ( FFP_Pinfty
== Res
)
56 SetSR(Overflow_Bit
, Zero_Bit
| Negative_Bit
| Overflow_Bit
);
60 tmp
= (fnum1
& FFPExponent_Mask
) - 0x41;
62 if ( tmp
<= 2 || (tmp
== 3 && (fnum1
& FFPMantisse_Mask
) < 0x90000000) )
64 Res
= SPAdd(Res
, SPDiv(Res
, one
));
68 /* should be ((char)Res) --, but gcc on Linux screws up the result */
69 tmp
= Res
& 0xFFFFFF00;
73 if (0 == Res
|| (char)Res
< 0 )
75 SetSR(Zero_Bit
, Zero_Bit
| Negative_Bit
| Overflow_Bit
);