POK
Main Page
Classes
Files
File List
File Members
e_acoshf.c
1
/*
2
* POK header
3
*
4
* The following file is a part of the POK project. Any modification should
5
* made according to the POK licence. You CANNOT use this file or a part of
6
* this file is this part of a file for your own project
7
*
8
* For more information on the POK licence, please see our LICENCE FILE
9
*
10
* Please follow the coding guidelines described in doc/CODING_GUIDELINES
11
*
12
* Copyright (c) 2007-2009 POK team
13
*
14
* Created by julien on Fri Jan 30 14:41:34 2009
15
*/
16
17
/* e_acoshf.c -- float version of e_acosh.c.
18
* Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
19
*/
20
21
/*
22
* ====================================================
23
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
24
*
25
* Developed at SunPro, a Sun Microsystems, Inc. business.
26
* Permission to use, copy, modify, and distribute this
27
* software is freely granted, provided that this notice
28
* is preserved.
29
* ====================================================
30
*/
31
32
#ifdef POK_NEEDS_LIBMATH
33
34
#include <libm.h>
35
#include "math_private.h"
36
37
static
const
float
38
one = 1.0,
39
ln2 = 6.9314718246e-01;
/* 0x3f317218 */
40
41
float
42
__ieee754_acoshf(
float
x)
43
{
44
float
t;
45
int32_t hx;
46
GET_FLOAT_WORD(hx,x);
47
if
(hx<0x3f800000) {
/* x < 1 */
48
return
(x-x)/(x-x);
49
}
else
if
(hx >=0x4d800000) {
/* x > 2**28 */
50
if
(hx >=0x7f800000) {
/* x is inf of NaN */
51
return
x+x;
52
}
else
53
return
__ieee754_logf(x)+ln2;
/* acosh(huge)=log(2x) */
54
}
else
if
(hx==0x3f800000) {
55
return
0.0;
/* acosh(1) = 0 */
56
}
else
if
(hx > 0x40000000) {
/* 2**28 > x > 2 */
57
t=x*x;
58
return
__ieee754_logf((
float
)2.0*x-one/(x+__ieee754_sqrtf(t-one)));
59
}
else
{
/* 1<x<2 */
60
t = x-one;
61
return
log1pf(t+sqrtf((
float
)2.0*t+t*t));
62
}
63
}
64
65
#endif
66
libpok
libm
e_acoshf.c
Generated on Fri Jun 1 2012 19:07:13 for POK by
1.8.1