Numworks Epsilon
1.4.1
Graphing Calculator Operating System
s_asinhf.c
Go to the documentation of this file.
1
/* s_asinhf.c -- float version of s_asinh.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.0000000000e+00,
/* 0x3F800000 */
21
ln2 = 6.9314718246e-01,
/* 0x3f317218 */
22
huge= 1.0000000000e+30;
23
24
float
25
asinhf
(
float
x)
26
{
27
float
t,w;
28
int32_t
hx,ix;
29
GET_FLOAT_WORD
(hx,x);
30
ix = hx&0x7fffffff;
31
if
(ix>=0x7f800000)
return
x+x;
/* x is inf or NaN */
32
if
(ix< 0x31800000) {
/* |x|<2**-28 */
33
if
(huge+x>
one
)
return
x;
/* return x inexact except 0 */
34
}
35
if
(ix>0x4d800000) {
/* |x| > 2**28 */
36
w =
logf
(
fabsf
(x))+ln2;
37
}
else
if
(ix>0x40000000) {
/* 2**28 > |x| > 2.0 */
38
t =
fabsf
(x);
39
w =
logf
((
float
)2.0*t+
one
/(
sqrtf
(x*x+
one
)+t));
40
}
else
{
/* 2.0 > |x| > 2**-28 */
41
t = x*x;
42
w =
log1pf
(
fabsf
(x)+t/(
one
+
sqrtf
(
one
+t)));
43
}
44
if
(hx>0)
return
w;
else
return
-w;
45
}
log1pf
#define log1pf(x)
Definition:
math.h:148
fabsf
#define fabsf(x)
Definition:
math.h:141
logf
#define logf(x)
Definition:
math.h:150
one
#define one
Definition:
k_tan.c:68
sqrtf
#define sqrtf(x)
Definition:
math.h:158
GET_FLOAT_WORD
#define GET_FLOAT_WORD(i, d)
Definition:
math_private.h:326
asinhf
float asinhf(float x)
Definition:
s_asinhf.c:25
int32_t
signed int int32_t
Definition:
stdint.h:11
math_private.h
epsilon
liba
src
external
openbsd
s_asinhf.c
Generated by
1.8.14