OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [newlib/] [newlib/] [libm/] [math/] [ef_atanh.c] - Blame information for rev 1775

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 39 lampret
/* ef_atanh.c -- float version of e_atanh.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__
20
static const float one = 1.0, huge = 1e30;
21
#else
22
static float one = 1.0, huge = 1e30;
23
#endif
24
 
25
#ifdef __STDC__
26
static const float zero = 0.0;
27
#else
28
static float zero = 0.0;
29
#endif
30
 
31
#ifdef __STDC__
32
        float __ieee754_atanhf(float x)
33
#else
34
        float __ieee754_atanhf(x)
35
        float x;
36
#endif
37
{
38
        float t;
39
        __int32_t hx,ix;
40
        GET_FLOAT_WORD(hx,x);
41
        ix = hx&0x7fffffff;
42
        if (ix>0x3f800000)              /* |x|>1 */
43
            return (x-x)/(x-x);
44
        if(ix==0x3f800000)
45
            return x/zero;
46
        if(ix<0x31800000&&(huge+x)>zero) return x;      /* x<2**-28 */
47
        SET_FLOAT_WORD(x,ix);
48
        if(ix<0x3f000000) {             /* x < 0.5 */
49
            t = x+x;
50
            t = (float)0.5*log1pf(t+t*x/(one-x));
51
        } else
52
            t = (float)0.5*log1pf((x+x)/(one-x));
53
        if(hx>=0) return t; else return -t;
54
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.