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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [newlib/] [newlib/] [libm/] [math/] [ef_cosh.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 39 lampret
/* ef_cosh.c -- float version of e_cosh.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 "fdlibm.h"
17
 
18
#ifdef __v810__
19
#define const
20
#endif
21
 
22
#ifdef __STDC__
23
static const float one = 1.0, half=0.5, huge = 1.0e30;
24
#else
25
static float one = 1.0, half=0.5, huge = 1.0e30;
26
#endif
27
 
28
#ifdef __STDC__
29
        float __ieee754_coshf(float x)
30
#else
31
        float __ieee754_coshf(x)
32
        float x;
33
#endif
34
{
35
        float t,w;
36
        __int32_t ix;
37
 
38
        GET_FLOAT_WORD(ix,x);
39
        ix &= 0x7fffffff;
40
 
41
    /* x is INF or NaN */
42
        if(ix>=0x7f800000) return x*x;
43
 
44
    /* |x| in [0,0.5*ln2], return 1+expm1(|x|)^2/(2*exp(|x|)) */
45
        if(ix<0x3eb17218) {
46
            t = expm1f(fabsf(x));
47
            w = one+t;
48
            if (ix<0x24000000) return w;        /* cosh(tiny) = 1 */
49
            return one+(t*t)/(w+w);
50
        }
51
 
52
    /* |x| in [0.5*ln2,22], return (exp(|x|)+1/exp(|x|)/2; */
53
        if (ix < 0x41b00000) {
54
                t = __ieee754_expf(fabsf(x));
55
                return half*t+half/t;
56
        }
57
 
58
    /* |x| in [22, log(maxdouble)] return half*exp(|x|) */
59
        if (ix < 0x42b17180)  return half*__ieee754_expf(fabsf(x));
60
 
61
    /* |x| in [log(maxdouble), overflowthresold] */
62
        if (ix<=0x42b2d4fc) {
63
            w = __ieee754_expf(half*fabsf(x));
64
            t = half*w;
65
            return t*w;
66
        }
67
 
68
    /* |x| > overflowthresold, cosh(x) overflow */
69
        return huge*huge;
70
}

powered by: WebSVN 2.1.0

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