Numworks Epsilon
1.4.1
Graphing Calculator Operating System
e_acosh.c
Go to the documentation of this file.
1
/* @(#)e_acosh.c 5.1 93/09/24 */
2
/*
3
* ====================================================
4
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
5
*
6
* Developed at SunPro, a Sun Microsystems, Inc. business.
7
* Permission to use, copy, modify, and distribute this
8
* software is freely granted, provided that this notice
9
* is preserved.
10
* ====================================================
11
*/
12
13
/* acosh(x)
14
* Method :
15
* Based on
16
* acosh(x) = log [ x + sqrt(x*x-1) ]
17
* we have
18
* acosh(x) := log(x)+ln2, if x is large; else
19
* acosh(x) := log(2x-1/(sqrt(x*x-1)+x)) if x>2; else
20
* acosh(x) := log1p(t+sqrt(2.0*t+t*t)); where t=x-1.
21
*
22
* Special cases:
23
* acosh(x) is NaN with signal if x<1.
24
* acosh(NaN) is NaN without signal.
25
*/
26
27
#include "math.h"
28
#include "
math_private.h
"
29
30
static
const
double
31
one
= 1.0,
32
ln2 = 6.93147180559945286227e-01;
/* 0x3FE62E42, 0xFEFA39EF */
33
34
double
35
acosh
(
double
x)
36
{
37
double
t;
38
int32_t
hx;
39
u_int32_t
lx;
40
EXTRACT_WORDS
(hx,lx,x);
41
if
(hx<0x3ff00000) {
/* x < 1 */
42
return
(x-x)/(x-x);
43
}
else
if
(hx >=0x41b00000) {
/* x > 2**28 */
44
if
(hx >=0x7ff00000) {
/* x is inf of NaN */
45
return
x+x;
46
}
else
47
return
log
(x)+ln2;
/* acosh(huge)=log(2x) */
48
}
else
if
(((hx-0x3ff00000)|lx)==0) {
49
return
0.0;
/* acosh(1) = 0 */
50
}
else
if
(hx > 0x40000000) {
/* 2**28 > x > 2 */
51
t=x*x;
52
return
log
(2.0*x-
one
/(x+
sqrt
(t-
one
)));
53
}
else
{
/* 1<x<2 */
54
t = x-
one
;
55
return
log1p
(t+
sqrt
(2.0*t+t*t));
56
}
57
}
log1p
#define log1p(x)
Definition:
math.h:185
acosh
double acosh(double x)
Definition:
e_acosh.c:35
one
#define one
Definition:
k_tan.c:68
u_int32_t
uint32_t u_int32_t
Definition:
types.h:10
log
#define log(x)
Definition:
math.h:184
EXTRACT_WORDS
#define EXTRACT_WORDS(ix0, ix1, d)
Definition:
math_private.h:259
int32_t
signed int int32_t
Definition:
stdint.h:11
sqrt
#define sqrt(x)
Definition:
math.h:196
math_private.h
epsilon
liba
src
external
openbsd
e_acosh.c
Generated by
1.8.14