e_acoshf.c revision 2117
1176434Skaiw/* e_acoshf.c -- float version of e_acosh.c. 2176434Skaiw * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. 3176434Skaiw */ 4176434Skaiw 5176434Skaiw/* 6176434Skaiw * ==================================================== 7176434Skaiw * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. 8176434Skaiw * 9176434Skaiw * Developed at SunPro, a Sun Microsystems, Inc. business. 10176434Skaiw * Permission to use, copy, modify, and distribute this 11176434Skaiw * software is freely granted, provided that this notice 12176434Skaiw * is preserved. 13176434Skaiw * ==================================================== 14176434Skaiw */ 15176434Skaiw 16176434Skaiw#ifndef lint 17176434Skaiwstatic char rcsid[] = "$Id: e_acoshf.c,v 1.2 1994/08/18 23:04:57 jtc Exp $"; 18176434Skaiw#endif 19176434Skaiw 20176434Skaiw#include "math.h" 21176434Skaiw#include "math_private.h" 22176434Skaiw 23176434Skaiw#ifdef __STDC__ 24176434Skaiwstatic const float 25176434Skaiw#else 26176434Skaiwstatic float 27176434Skaiw#endif 28176434Skaiwone = 1.0, 29176434Skaiwln2 = 6.9314718246e-01; /* 0x3f317218 */ 30176434Skaiw 31176434Skaiw#ifdef __STDC__ 32176434Skaiw float __ieee754_acoshf(float x) 33176434Skaiw#else 34176434Skaiw float __ieee754_acoshf(x) 35176434Skaiw float x; 36176434Skaiw#endif 37176434Skaiw{ 38176434Skaiw float t; 39176434Skaiw int32_t hx; 40176434Skaiw GET_FLOAT_WORD(hx,x); 41176434Skaiw if(hx<0x3f800000) { /* x < 1 */ 42176434Skaiw return (x-x)/(x-x); 43176434Skaiw } else if(hx >=0x4d800000) { /* x > 2**28 */ 44285224Semaste if(hx >=0x7f800000) { /* x is inf of NaN */ 45176434Skaiw return x+x; 46176434Skaiw } else 47176434Skaiw return __ieee754_logf(x)+ln2; /* acosh(huge)=log(2x) */ 48176434Skaiw } else if (hx==0x3f800000) { 49176434Skaiw return 0.0; /* acosh(1) = 0 */ 50176434Skaiw } else if (hx > 0x40000000) { /* 2**28 > x > 2 */ 51176434Skaiw t=x*x; 52176434Skaiw return __ieee754_logf((float)2.0*x-one/(x+sqrtf(t-one))); 53176434Skaiw } else { /* 1<x<2 */ 54176434Skaiw t = x-one; 55176434Skaiw return log1pf(t+sqrtf((float)2.0*t+t*t)); 56176434Skaiw } 57176434Skaiw} 58176434Skaiw