gonzui


Format: Advanced Search

t2ex/bsd_source/lib/libc/src_bsd/math/e_acoshf.cbare sourcepermlink (0.00 seconds)

Search this content:

    1: /* e_acoshf.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: #include "math.h"
   17: #include "math_private.h"
   18: 
   19: static const float 
   20: one     = 1.0,
   21: ln2     = 6.9314718246e-01;  /* 0x3f317218 */
   22: 
   23: float
   24: acoshf(float x)
   25: {       
   26:         float t;
   27:         int32_t hx;
   28:         GET_FLOAT_WORD(hx,x);
   29:         if(hx<0x3f800000) {            /* x < 1 */
   30:             return (x-x)/(x-x);
   31:         } else if(hx >=0x4d800000) {   /* x > 2**28 */
   32:             if(hx >=0x7f800000) {      /* x is inf of NaN */
   33:                 return x+x;
   34:             } else 
   35:                 return logf(x)+ln2;   /* acosh(huge)=log(2x) */
   36:         } else if (hx==0x3f800000) {
   37:             return 0.0;                        /* acosh(1) = 0 */
   38:         } else if (hx > 0x40000000) {  /* 2**28 > x > 2 */
   39:             t=x*x;
   40:             return logf((float)2.0*x-one/(x+sqrtf(t-one)));
   41:         } else {                       /* 1<x<2 */
   42:             t = x-one;
   43:             return log1pf(t+sqrtf((float)2.0*t+t*t));
   44:         }
   45: }