source: trunk/libs/newlib/src/newlib/libm/math/ef_acosh.c @ 471

Last change on this file since 471 was 444, checked in by satin@…, 6 years ago

add newlib,libalmos-mkh, restructure shared_syscalls.h and mini-libc

File size: 1.3 KB
Line 
1/* ef_acosh.c -- float version of e_acosh.c.
2 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
3 */
4
5/*
6 * ====================================================
7 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
8 *
9 * Developed at SunPro, a Sun Microsystems, Inc. business.
10 * Permission to use, copy, modify, and distribute this
11 * software is freely granted, provided that this notice
12 * is preserved.
13 * ====================================================
14 *
15 */
16
17#include "fdlibm.h"
18
19#ifdef __STDC__
20static const float 
21#else
22static float 
23#endif
24one     = 1.0,
25ln2     = 6.9314718246e-01;  /* 0x3f317218 */
26
27#ifdef __STDC__
28        float __ieee754_acoshf(float x)
29#else
30        float __ieee754_acoshf(x)
31        float x;
32#endif
33{       
34        float t;
35        __int32_t hx;
36        GET_FLOAT_WORD(hx,x);
37        if(hx<0x3f800000) {             /* x < 1 */
38            return (x-x)/(x-x);
39        } else if(hx >=0x4d800000) {    /* x > 2**28 */
40            if(!FLT_UWORD_IS_FINITE(hx)) {      /* x is inf of NaN */
41                return x+x;
42            } else 
43                return __ieee754_logf(x)+ln2;   /* acosh(huge)=log(2x) */
44        } else if (hx==0x3f800000) {
45            return 0.0;                 /* acosh(1) = 0 */
46        } else if (hx > 0x40000000) {   /* 2**28 > x > 2 */
47            t=x*x;
48            return __ieee754_logf((float)2.0*x-one/(x+__ieee754_sqrtf(t-one)));
49        } else {                        /* 1<x<2 */
50            t = x-one;
51            return log1pf(t+__ieee754_sqrtf((float)2.0*t+t*t));
52        }
53}
Note: See TracBrowser for help on using the repository browser.