Mercurial > cpython-lru_cache-weakref
annotate Modules/cmathmodule.c @ 49955:878d40468c4e legacy-trunk
Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
| author | Vinay Sajip <vinay_sajip@yahoo.co.uk> |
|---|---|
| date | Wed, 03 Dec 2008 23:22:58 +0000 |
| parents | f772476ad90d |
| children | 676567e2a711 |
| rev | line source |
|---|---|
| 3334 | 1 /* Complex math module */ |
| 2 | |
| 3 /* much code borrowed from mathmodule.c */ | |
| 4 | |
|
4639
97ec9dfbb2b6
Renamed Grandly
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
5 #include "Python.h" |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
6 /* we need DBL_MAX, DBL_MIN, DBL_EPSILON, DBL_MANT_DIG and FLT_RADIX from |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
7 float.h. We assume that FLT_RADIX is either 2 or 16. */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
8 #include <float.h> |
| 3334 | 9 |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
10 #if (FLT_RADIX != 2 && FLT_RADIX != 16) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
11 #error "Modules/cmathmodule.c expects FLT_RADIX to be 2 or 16" |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
12 #endif |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
13 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
14 #ifndef M_LN2 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
15 #define M_LN2 (0.6931471805599453094) /* natural log of 2 */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
16 #endif |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
17 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
18 #ifndef M_LN10 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
19 #define M_LN10 (2.302585092994045684) /* natural log of 10 */ |
| 3334 | 20 #endif |
| 21 | |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
22 /* |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
23 CM_LARGE_DOUBLE is used to avoid spurious overflow in the sqrt, log, |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
24 inverse trig and inverse hyperbolic trig functions. Its log is used in the |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
25 evaluation of exp, cos, cosh, sin, sinh, tan, and tanh to avoid unecessary |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
26 overflow. |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
27 */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
28 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
29 #define CM_LARGE_DOUBLE (DBL_MAX/4.) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
30 #define CM_SQRT_LARGE_DOUBLE (sqrt(CM_LARGE_DOUBLE)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
31 #define CM_LOG_LARGE_DOUBLE (log(CM_LARGE_DOUBLE)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
32 #define CM_SQRT_DBL_MIN (sqrt(DBL_MIN)) |
| 3334 | 33 |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
34 /* |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
35 CM_SCALE_UP is an odd integer chosen such that multiplication by |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
36 2**CM_SCALE_UP is sufficient to turn a subnormal into a normal. |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
37 CM_SCALE_DOWN is (-(CM_SCALE_UP+1)/2). These scalings are used to compute |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
38 square roots accurately when the real and imaginary parts of the argument |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
39 are subnormal. |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
40 */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
41 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
42 #if FLT_RADIX==2 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
43 #define CM_SCALE_UP (2*(DBL_MANT_DIG/2) + 1) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
44 #elif FLT_RADIX==16 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
45 #define CM_SCALE_UP (4*DBL_MANT_DIG+1) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
46 #endif |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
47 #define CM_SCALE_DOWN (-(CM_SCALE_UP+1)/2) |
| 3334 | 48 |
| 49 /* forward declarations */ | |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
50 static Py_complex c_asinh(Py_complex); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
51 static Py_complex c_atanh(Py_complex); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
52 static Py_complex c_cosh(Py_complex); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
53 static Py_complex c_sinh(Py_complex); |
|
24280
1598a1e473e2
staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23832
diff
changeset
|
54 static Py_complex c_sqrt(Py_complex); |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
55 static Py_complex c_tanh(Py_complex); |
|
32350
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24471
diff
changeset
|
56 static PyObject * math_error(void); |
| 3334 | 57 |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
58 /* Code to deal with special values (infinities, NaNs, etc.). */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
59 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
60 /* special_type takes a double and returns an integer code indicating |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
61 the type of the double as follows: |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
62 */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
63 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
64 enum special_types { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
65 ST_NINF, /* 0, negative infinity */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
66 ST_NEG, /* 1, negative finite number (nonzero) */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
67 ST_NZERO, /* 2, -0. */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
68 ST_PZERO, /* 3, +0. */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
69 ST_POS, /* 4, positive finite number (nonzero) */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
70 ST_PINF, /* 5, positive infinity */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
71 ST_NAN, /* 6, Not a Number */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
72 }; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
73 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
74 static enum special_types |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
75 special_type(double d) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
76 { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
77 if (Py_IS_FINITE(d)) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
78 if (d != 0) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
79 if (copysign(1., d) == 1.) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
80 return ST_POS; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
81 else |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
82 return ST_NEG; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
83 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
84 else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
85 if (copysign(1., d) == 1.) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
86 return ST_PZERO; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
87 else |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
88 return ST_NZERO; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
89 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
90 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
91 if (Py_IS_NAN(d)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
92 return ST_NAN; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
93 if (copysign(1., d) == 1.) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
94 return ST_PINF; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
95 else |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
96 return ST_NINF; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
97 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
98 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
99 #define SPECIAL_VALUE(z, table) \ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
100 if (!Py_IS_FINITE((z).real) || !Py_IS_FINITE((z).imag)) { \ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
101 errno = 0; \ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
102 return table[special_type((z).real)] \ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
103 [special_type((z).imag)]; \ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
104 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
105 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
106 #define P Py_MATH_PI |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
107 #define P14 0.25*Py_MATH_PI |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
108 #define P12 0.5*Py_MATH_PI |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
109 #define P34 0.75*Py_MATH_PI |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
110 #define INF Py_HUGE_VAL |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
111 #define N Py_NAN |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
112 #define U -9.5426319407711027e33 /* unlikely value, used as placeholder */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
113 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
114 /* First, the C functions that do the real work. Each of the c_* |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
115 functions computes and returns the C99 Annex G recommended result |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
116 and also sets errno as follows: errno = 0 if no floating-point |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
117 exception is associated with the result; errno = EDOM if C99 Annex |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
118 G recommends raising divide-by-zero or invalid for this result; and |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
119 errno = ERANGE where the overflow floating-point signal should be |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
120 raised. |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
121 */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
122 |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
123 static Py_complex acos_special_values[7][7]; |
| 3334 | 124 |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
125 static Py_complex |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
126 c_acos(Py_complex z) |
| 3334 | 127 { |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
128 Py_complex s1, s2, r; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
129 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
130 SPECIAL_VALUE(z, acos_special_values); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
131 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
132 if (fabs(z.real) > CM_LARGE_DOUBLE || fabs(z.imag) > CM_LARGE_DOUBLE) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
133 /* avoid unnecessary overflow for large arguments */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
134 r.real = atan2(fabs(z.imag), z.real); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
135 /* split into cases to make sure that the branch cut has the |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
136 correct continuity on systems with unsigned zeros */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
137 if (z.real < 0.) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
138 r.imag = -copysign(log(hypot(z.real/2., z.imag/2.)) + |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
139 M_LN2*2., z.imag); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
140 } else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
141 r.imag = copysign(log(hypot(z.real/2., z.imag/2.)) + |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
142 M_LN2*2., -z.imag); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
143 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
144 } else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
145 s1.real = 1.-z.real; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
146 s1.imag = -z.imag; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
147 s1 = c_sqrt(s1); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
148 s2.real = 1.+z.real; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
149 s2.imag = z.imag; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
150 s2 = c_sqrt(s2); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
151 r.real = 2.*atan2(s1.real, s2.real); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
152 r.imag = asinh(s2.real*s1.imag - s2.imag*s1.real); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
153 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
154 errno = 0; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
155 return r; |
| 3334 | 156 } |
| 157 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
158 PyDoc_STRVAR(c_acos_doc, |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
159 "acos(x)\n" |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
160 "\n" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
161 "Return the arc cosine of x."); |
|
9593
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
162 |
|
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
163 |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
164 static Py_complex acosh_special_values[7][7]; |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
165 |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
166 static Py_complex |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
167 c_acosh(Py_complex z) |
| 3334 | 168 { |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
169 Py_complex s1, s2, r; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
170 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
171 SPECIAL_VALUE(z, acosh_special_values); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
172 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
173 if (fabs(z.real) > CM_LARGE_DOUBLE || fabs(z.imag) > CM_LARGE_DOUBLE) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
174 /* avoid unnecessary overflow for large arguments */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
175 r.real = log(hypot(z.real/2., z.imag/2.)) + M_LN2*2.; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
176 r.imag = atan2(z.imag, z.real); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
177 } else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
178 s1.real = z.real - 1.; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
179 s1.imag = z.imag; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
180 s1 = c_sqrt(s1); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
181 s2.real = z.real + 1.; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
182 s2.imag = z.imag; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
183 s2 = c_sqrt(s2); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
184 r.real = asinh(s1.real*s2.real + s1.imag*s2.imag); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
185 r.imag = 2.*atan2(s1.imag, s2.real); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
186 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
187 errno = 0; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
188 return r; |
| 3334 | 189 } |
| 190 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
191 PyDoc_STRVAR(c_acosh_doc, |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
192 "acosh(x)\n" |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
193 "\n" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
194 "Return the hyperbolic arccosine of x."); |
|
9593
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
195 |
|
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
196 |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
197 static Py_complex |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
198 c_asin(Py_complex z) |
| 3334 | 199 { |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
200 /* asin(z) = -i asinh(iz) */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
201 Py_complex s, r; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
202 s.real = -z.imag; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
203 s.imag = z.real; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
204 s = c_asinh(s); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
205 r.real = s.imag; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
206 r.imag = -s.real; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
207 return r; |
| 3334 | 208 } |
| 209 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
210 PyDoc_STRVAR(c_asin_doc, |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
211 "asin(x)\n" |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
212 "\n" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
213 "Return the arc sine of x."); |
|
9593
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
214 |
|
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
215 |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
216 static Py_complex asinh_special_values[7][7]; |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
217 |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
218 static Py_complex |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
219 c_asinh(Py_complex z) |
| 3334 | 220 { |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
221 Py_complex s1, s2, r; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
222 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
223 SPECIAL_VALUE(z, asinh_special_values); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
224 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
225 if (fabs(z.real) > CM_LARGE_DOUBLE || fabs(z.imag) > CM_LARGE_DOUBLE) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
226 if (z.imag >= 0.) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
227 r.real = copysign(log(hypot(z.real/2., z.imag/2.)) + |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
228 M_LN2*2., z.real); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
229 } else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
230 r.real = -copysign(log(hypot(z.real/2., z.imag/2.)) + |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
231 M_LN2*2., -z.real); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
232 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
233 r.imag = atan2(z.imag, fabs(z.real)); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
234 } else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
235 s1.real = 1.+z.imag; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
236 s1.imag = -z.real; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
237 s1 = c_sqrt(s1); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
238 s2.real = 1.-z.imag; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
239 s2.imag = z.real; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
240 s2 = c_sqrt(s2); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
241 r.real = asinh(s1.real*s2.imag-s2.real*s1.imag); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
242 r.imag = atan2(z.imag, s1.real*s2.real-s1.imag*s2.imag); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
243 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
244 errno = 0; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
245 return r; |
| 3334 | 246 } |
| 247 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
248 PyDoc_STRVAR(c_asinh_doc, |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
249 "asinh(x)\n" |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
250 "\n" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
251 "Return the hyperbolic arc sine of x."); |
|
9593
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
252 |
|
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
253 |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
254 static Py_complex |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
255 c_atan(Py_complex z) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
256 { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
257 /* atan(z) = -i atanh(iz) */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
258 Py_complex s, r; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
259 s.real = -z.imag; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
260 s.imag = z.real; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
261 s = c_atanh(s); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
262 r.real = s.imag; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
263 r.imag = -s.real; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
264 return r; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
265 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
266 |
|
46516
ec48490b969a
Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46505
diff
changeset
|
267 /* Windows screws up atan2 for inf and nan, and alpha Tru64 5.1 doesn't follow |
|
ec48490b969a
Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46505
diff
changeset
|
268 C99 for atan2(0., 0.). */ |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
269 static double |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
270 c_atan2(Py_complex z) |
| 3334 | 271 { |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
272 if (Py_IS_NAN(z.real) || Py_IS_NAN(z.imag)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
273 return Py_NAN; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
274 if (Py_IS_INFINITY(z.imag)) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
275 if (Py_IS_INFINITY(z.real)) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
276 if (copysign(1., z.real) == 1.) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
277 /* atan2(+-inf, +inf) == +-pi/4 */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
278 return copysign(0.25*Py_MATH_PI, z.imag); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
279 else |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
280 /* atan2(+-inf, -inf) == +-pi*3/4 */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
281 return copysign(0.75*Py_MATH_PI, z.imag); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
282 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
283 /* atan2(+-inf, x) == +-pi/2 for finite x */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
284 return copysign(0.5*Py_MATH_PI, z.imag); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
285 } |
|
46516
ec48490b969a
Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46505
diff
changeset
|
286 if (Py_IS_INFINITY(z.real) || z.imag == 0.) { |
|
ec48490b969a
Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46505
diff
changeset
|
287 if (copysign(1., z.real) == 1.) |
|
ec48490b969a
Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46505
diff
changeset
|
288 /* atan2(+-y, +inf) = atan2(+-0, +x) = +-0. */ |
|
ec48490b969a
Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46505
diff
changeset
|
289 return copysign(0., z.imag); |
|
ec48490b969a
Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46505
diff
changeset
|
290 else |
|
ec48490b969a
Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46505
diff
changeset
|
291 /* atan2(+-y, -inf) = atan2(+-0., -x) = +-pi. */ |
|
ec48490b969a
Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46505
diff
changeset
|
292 return copysign(Py_MATH_PI, z.imag); |
|
ec48490b969a
Merged revisions 62420-62421,62423-62424 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46505
diff
changeset
|
293 } |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
294 return atan2(z.imag, z.real); |
| 3334 | 295 } |
| 296 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
297 PyDoc_STRVAR(c_atan_doc, |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
298 "atan(x)\n" |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
299 "\n" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
300 "Return the arc tangent of x."); |
|
9593
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
301 |
|
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
302 |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
303 static Py_complex atanh_special_values[7][7]; |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
304 |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
305 static Py_complex |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
306 c_atanh(Py_complex z) |
| 3334 | 307 { |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
308 Py_complex r; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
309 double ay, h; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
310 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
311 SPECIAL_VALUE(z, atanh_special_values); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
312 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
313 /* Reduce to case where z.real >= 0., using atanh(z) = -atanh(-z). */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
314 if (z.real < 0.) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
315 return c_neg(c_atanh(c_neg(z))); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
316 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
317 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
318 ay = fabs(z.imag); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
319 if (z.real > CM_SQRT_LARGE_DOUBLE || ay > CM_SQRT_LARGE_DOUBLE) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
320 /* |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
321 if abs(z) is large then we use the approximation |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
322 atanh(z) ~ 1/z +/- i*pi/2 (+/- depending on the sign |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
323 of z.imag) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
324 */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
325 h = hypot(z.real/2., z.imag/2.); /* safe from overflow */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
326 r.real = z.real/4./h/h; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
327 /* the two negations in the next line cancel each other out |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
328 except when working with unsigned zeros: they're there to |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
329 ensure that the branch cut has the correct continuity on |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
330 systems that don't support signed zeros */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
331 r.imag = -copysign(Py_MATH_PI/2., -z.imag); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
332 errno = 0; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
333 } else if (z.real == 1. && ay < CM_SQRT_DBL_MIN) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
334 /* C99 standard says: atanh(1+/-0.) should be inf +/- 0i */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
335 if (ay == 0.) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
336 r.real = INF; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
337 r.imag = z.imag; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
338 errno = EDOM; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
339 } else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
340 r.real = -log(sqrt(ay)/sqrt(hypot(ay, 2.))); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
341 r.imag = copysign(atan2(2., -ay)/2, z.imag); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
342 errno = 0; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
343 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
344 } else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
345 r.real = log1p(4.*z.real/((1-z.real)*(1-z.real) + ay*ay))/4.; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
346 r.imag = -atan2(-2.*z.imag, (1-z.real)*(1+z.real) - ay*ay)/2.; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
347 errno = 0; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
348 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
349 return r; |
| 3334 | 350 } |
| 351 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
352 PyDoc_STRVAR(c_atanh_doc, |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
353 "atanh(x)\n" |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
354 "\n" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
355 "Return the hyperbolic arc tangent of x."); |
|
9593
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
356 |
|
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
357 |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
358 static Py_complex |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
359 c_cos(Py_complex z) |
| 3334 | 360 { |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
361 /* cos(z) = cosh(iz) */ |
| 3771 | 362 Py_complex r; |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
363 r.real = -z.imag; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
364 r.imag = z.real; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
365 r = c_cosh(r); |
| 3334 | 366 return r; |
| 367 } | |
| 368 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
369 PyDoc_STRVAR(c_cos_doc, |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
370 "cos(x)\n" |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
371 "n" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
372 "Return the cosine of x."); |
|
9593
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
373 |
|
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
374 |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
375 /* cosh(infinity + i*y) needs to be dealt with specially */ |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
376 static Py_complex cosh_special_values[7][7]; |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
377 |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
378 static Py_complex |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
379 c_cosh(Py_complex z) |
| 3334 | 380 { |
| 3771 | 381 Py_complex r; |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
382 double x_minus_one; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
383 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
384 /* special treatment for cosh(+/-inf + iy) if y is not a NaN */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
385 if (!Py_IS_FINITE(z.real) || !Py_IS_FINITE(z.imag)) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
386 if (Py_IS_INFINITY(z.real) && Py_IS_FINITE(z.imag) && |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
387 (z.imag != 0.)) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
388 if (z.real > 0) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
389 r.real = copysign(INF, cos(z.imag)); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
390 r.imag = copysign(INF, sin(z.imag)); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
391 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
392 else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
393 r.real = copysign(INF, cos(z.imag)); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
394 r.imag = -copysign(INF, sin(z.imag)); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
395 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
396 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
397 else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
398 r = cosh_special_values[special_type(z.real)] |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
399 [special_type(z.imag)]; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
400 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
401 /* need to set errno = EDOM if y is +/- infinity and x is not |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
402 a NaN */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
403 if (Py_IS_INFINITY(z.imag) && !Py_IS_NAN(z.real)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
404 errno = EDOM; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
405 else |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
406 errno = 0; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
407 return r; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
408 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
409 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
410 if (fabs(z.real) > CM_LOG_LARGE_DOUBLE) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
411 /* deal correctly with cases where cosh(z.real) overflows but |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
412 cosh(z) does not. */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
413 x_minus_one = z.real - copysign(1., z.real); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
414 r.real = cos(z.imag) * cosh(x_minus_one) * Py_MATH_E; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
415 r.imag = sin(z.imag) * sinh(x_minus_one) * Py_MATH_E; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
416 } else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
417 r.real = cos(z.imag) * cosh(z.real); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
418 r.imag = sin(z.imag) * sinh(z.real); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
419 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
420 /* detect overflow, and set errno accordingly */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
421 if (Py_IS_INFINITY(r.real) || Py_IS_INFINITY(r.imag)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
422 errno = ERANGE; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
423 else |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
424 errno = 0; |
| 3334 | 425 return r; |
| 426 } | |
| 427 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
428 PyDoc_STRVAR(c_cosh_doc, |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
429 "cosh(x)\n" |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
430 "n" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
431 "Return the hyperbolic cosine of x."); |
|
9593
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
432 |
|
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
433 |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
434 /* exp(infinity + i*y) and exp(-infinity + i*y) need special treatment for |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
435 finite y */ |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
436 static Py_complex exp_special_values[7][7]; |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
437 |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
438 static Py_complex |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
439 c_exp(Py_complex z) |
| 3334 | 440 { |
| 3771 | 441 Py_complex r; |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
442 double l; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
443 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
444 if (!Py_IS_FINITE(z.real) || !Py_IS_FINITE(z.imag)) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
445 if (Py_IS_INFINITY(z.real) && Py_IS_FINITE(z.imag) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
446 && (z.imag != 0.)) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
447 if (z.real > 0) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
448 r.real = copysign(INF, cos(z.imag)); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
449 r.imag = copysign(INF, sin(z.imag)); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
450 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
451 else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
452 r.real = copysign(0., cos(z.imag)); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
453 r.imag = copysign(0., sin(z.imag)); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
454 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
455 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
456 else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
457 r = exp_special_values[special_type(z.real)] |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
458 [special_type(z.imag)]; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
459 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
460 /* need to set errno = EDOM if y is +/- infinity and x is not |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
461 a NaN and not -infinity */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
462 if (Py_IS_INFINITY(z.imag) && |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
463 (Py_IS_FINITE(z.real) || |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
464 (Py_IS_INFINITY(z.real) && z.real > 0))) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
465 errno = EDOM; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
466 else |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
467 errno = 0; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
468 return r; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
469 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
470 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
471 if (z.real > CM_LOG_LARGE_DOUBLE) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
472 l = exp(z.real-1.); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
473 r.real = l*cos(z.imag)*Py_MATH_E; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
474 r.imag = l*sin(z.imag)*Py_MATH_E; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
475 } else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
476 l = exp(z.real); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
477 r.real = l*cos(z.imag); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
478 r.imag = l*sin(z.imag); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
479 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
480 /* detect overflow, and set errno accordingly */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
481 if (Py_IS_INFINITY(r.real) || Py_IS_INFINITY(r.imag)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
482 errno = ERANGE; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
483 else |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
484 errno = 0; |
| 3334 | 485 return r; |
| 486 } | |
| 487 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
488 PyDoc_STRVAR(c_exp_doc, |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
489 "exp(x)\n" |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
490 "\n" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
491 "Return the exponential value e**x."); |
|
9593
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
492 |
|
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
493 |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
494 static Py_complex log_special_values[7][7]; |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
495 |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
496 static Py_complex |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
497 c_log(Py_complex z) |
| 3334 | 498 { |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
499 /* |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
500 The usual formula for the real part is log(hypot(z.real, z.imag)). |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
501 There are four situations where this formula is potentially |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
502 problematic: |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
503 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
504 (1) the absolute value of z is subnormal. Then hypot is subnormal, |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
505 so has fewer than the usual number of bits of accuracy, hence may |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
506 have large relative error. This then gives a large absolute error |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
507 in the log. This can be solved by rescaling z by a suitable power |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
508 of 2. |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
509 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
510 (2) the absolute value of z is greater than DBL_MAX (e.g. when both |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
511 z.real and z.imag are within a factor of 1/sqrt(2) of DBL_MAX) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
512 Again, rescaling solves this. |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
513 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
514 (3) the absolute value of z is close to 1. In this case it's |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
515 difficult to achieve good accuracy, at least in part because a |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
516 change of 1ulp in the real or imaginary part of z can result in a |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
517 change of billions of ulps in the correctly rounded answer. |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
518 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
519 (4) z = 0. The simplest thing to do here is to call the |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
520 floating-point log with an argument of 0, and let its behaviour |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
521 (returning -infinity, signaling a floating-point exception, setting |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
522 errno, or whatever) determine that of c_log. So the usual formula |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
523 is fine here. |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
524 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
525 */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
526 |
| 3771 | 527 Py_complex r; |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
528 double ax, ay, am, an, h; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
529 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
530 SPECIAL_VALUE(z, log_special_values); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
531 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
532 ax = fabs(z.real); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
533 ay = fabs(z.imag); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
534 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
535 if (ax > CM_LARGE_DOUBLE || ay > CM_LARGE_DOUBLE) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
536 r.real = log(hypot(ax/2., ay/2.)) + M_LN2; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
537 } else if (ax < DBL_MIN && ay < DBL_MIN) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
538 if (ax > 0. || ay > 0.) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
539 /* catch cases where hypot(ax, ay) is subnormal */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
540 r.real = log(hypot(ldexp(ax, DBL_MANT_DIG), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
541 ldexp(ay, DBL_MANT_DIG))) - DBL_MANT_DIG*M_LN2; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
542 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
543 else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
544 /* log(+/-0. +/- 0i) */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
545 r.real = -INF; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
546 r.imag = atan2(z.imag, z.real); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
547 errno = EDOM; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
548 return r; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
549 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
550 } else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
551 h = hypot(ax, ay); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
552 if (0.71 <= h && h <= 1.73) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
553 am = ax > ay ? ax : ay; /* max(ax, ay) */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
554 an = ax > ay ? ay : ax; /* min(ax, ay) */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
555 r.real = log1p((am-1)*(am+1)+an*an)/2.; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
556 } else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
557 r.real = log(h); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
558 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
559 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
560 r.imag = atan2(z.imag, z.real); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
561 errno = 0; |
| 3334 | 562 return r; |
| 563 } | |
| 564 | |
|
9593
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
565 |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
566 static Py_complex |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
567 c_log10(Py_complex z) |
| 3334 | 568 { |
| 3771 | 569 Py_complex r; |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
570 int errno_save; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
571 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
572 r = c_log(z); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
573 errno_save = errno; /* just in case the divisions affect errno */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
574 r.real = r.real / M_LN10; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
575 r.imag = r.imag / M_LN10; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
576 errno = errno_save; |
| 3334 | 577 return r; |
| 578 } | |
| 579 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
580 PyDoc_STRVAR(c_log10_doc, |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
581 "log10(x)\n" |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
582 "\n" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
583 "Return the base-10 logarithm of x."); |
|
9593
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
584 |
|
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
585 |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
586 static Py_complex |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
587 c_sin(Py_complex z) |
| 3334 | 588 { |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
589 /* sin(z) = -i sin(iz) */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
590 Py_complex s, r; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
591 s.real = -z.imag; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
592 s.imag = z.real; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
593 s = c_sinh(s); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
594 r.real = s.imag; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
595 r.imag = -s.real; |
| 3334 | 596 return r; |
| 597 } | |
| 598 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
599 PyDoc_STRVAR(c_sin_doc, |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
600 "sin(x)\n" |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
601 "\n" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
602 "Return the sine of x."); |
|
9593
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
603 |
|
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
604 |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
605 /* sinh(infinity + i*y) needs to be dealt with specially */ |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
606 static Py_complex sinh_special_values[7][7]; |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
607 |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
608 static Py_complex |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
609 c_sinh(Py_complex z) |
| 3334 | 610 { |
| 3771 | 611 Py_complex r; |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
612 double x_minus_one; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
613 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
614 /* special treatment for sinh(+/-inf + iy) if y is finite and |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
615 nonzero */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
616 if (!Py_IS_FINITE(z.real) || !Py_IS_FINITE(z.imag)) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
617 if (Py_IS_INFINITY(z.real) && Py_IS_FINITE(z.imag) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
618 && (z.imag != 0.)) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
619 if (z.real > 0) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
620 r.real = copysign(INF, cos(z.imag)); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
621 r.imag = copysign(INF, sin(z.imag)); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
622 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
623 else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
624 r.real = -copysign(INF, cos(z.imag)); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
625 r.imag = copysign(INF, sin(z.imag)); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
626 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
627 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
628 else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
629 r = sinh_special_values[special_type(z.real)] |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
630 [special_type(z.imag)]; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
631 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
632 /* need to set errno = EDOM if y is +/- infinity and x is not |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
633 a NaN */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
634 if (Py_IS_INFINITY(z.imag) && !Py_IS_NAN(z.real)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
635 errno = EDOM; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
636 else |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
637 errno = 0; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
638 return r; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
639 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
640 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
641 if (fabs(z.real) > CM_LOG_LARGE_DOUBLE) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
642 x_minus_one = z.real - copysign(1., z.real); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
643 r.real = cos(z.imag) * sinh(x_minus_one) * Py_MATH_E; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
644 r.imag = sin(z.imag) * cosh(x_minus_one) * Py_MATH_E; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
645 } else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
646 r.real = cos(z.imag) * sinh(z.real); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
647 r.imag = sin(z.imag) * cosh(z.real); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
648 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
649 /* detect overflow, and set errno accordingly */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
650 if (Py_IS_INFINITY(r.real) || Py_IS_INFINITY(r.imag)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
651 errno = ERANGE; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
652 else |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
653 errno = 0; |
| 3334 | 654 return r; |
| 655 } | |
| 656 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
657 PyDoc_STRVAR(c_sinh_doc, |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
658 "sinh(x)\n" |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
659 "\n" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
660 "Return the hyperbolic sine of x."); |
|
9593
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
661 |
|
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
662 |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
663 static Py_complex sqrt_special_values[7][7]; |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
664 |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
665 static Py_complex |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
666 c_sqrt(Py_complex z) |
| 3334 | 667 { |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
668 /* |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
669 Method: use symmetries to reduce to the case when x = z.real and y |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
670 = z.imag are nonnegative. Then the real part of the result is |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
671 given by |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
672 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
673 s = sqrt((x + hypot(x, y))/2) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
674 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
675 and the imaginary part is |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
676 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
677 d = (y/2)/s |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
678 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
679 If either x or y is very large then there's a risk of overflow in |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
680 computation of the expression x + hypot(x, y). We can avoid this |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
681 by rewriting the formula for s as: |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
682 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
683 s = 2*sqrt(x/8 + hypot(x/8, y/8)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
684 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
685 This costs us two extra multiplications/divisions, but avoids the |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
686 overhead of checking for x and y large. |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
687 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
688 If both x and y are subnormal then hypot(x, y) may also be |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
689 subnormal, so will lack full precision. We solve this by rescaling |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
690 x and y by a sufficiently large power of 2 to ensure that x and y |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
691 are normal. |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
692 */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
693 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
694 |
| 3771 | 695 Py_complex r; |
| 3334 | 696 double s,d; |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
697 double ax, ay; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
698 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
699 SPECIAL_VALUE(z, sqrt_special_values); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
700 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
701 if (z.real == 0. && z.imag == 0.) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
702 r.real = 0.; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
703 r.imag = z.imag; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
704 return r; |
| 3334 | 705 } |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
706 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
707 ax = fabs(z.real); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
708 ay = fabs(z.imag); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
709 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
710 if (ax < DBL_MIN && ay < DBL_MIN && (ax > 0. || ay > 0.)) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
711 /* here we catch cases where hypot(ax, ay) is subnormal */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
712 ax = ldexp(ax, CM_SCALE_UP); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
713 s = ldexp(sqrt(ax + hypot(ax, ldexp(ay, CM_SCALE_UP))), |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
714 CM_SCALE_DOWN); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
715 } else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
716 ax /= 8.; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
717 s = 2.*sqrt(ax + hypot(ax, ay/8.)); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
718 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
719 d = ay/(2.*s); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
720 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
721 if (z.real >= 0.) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
722 r.real = s; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
723 r.imag = copysign(d, z.imag); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
724 } else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
725 r.real = d; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
726 r.imag = copysign(s, z.imag); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
727 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
728 errno = 0; |
| 3334 | 729 return r; |
| 730 } | |
| 731 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
732 PyDoc_STRVAR(c_sqrt_doc, |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
733 "sqrt(x)\n" |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
734 "\n" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
735 "Return the square root of x."); |
|
9593
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
736 |
|
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
737 |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
738 static Py_complex |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
739 c_tan(Py_complex z) |
| 3334 | 740 { |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
741 /* tan(z) = -i tanh(iz) */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
742 Py_complex s, r; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
743 s.real = -z.imag; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
744 s.imag = z.real; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
745 s = c_tanh(s); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
746 r.real = s.imag; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
747 r.imag = -s.real; |
| 3334 | 748 return r; |
| 749 } | |
| 750 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
751 PyDoc_STRVAR(c_tan_doc, |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
752 "tan(x)\n" |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
753 "\n" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
754 "Return the tangent of x."); |
|
9593
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
755 |
|
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
756 |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
757 /* tanh(infinity + i*y) needs to be dealt with specially */ |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
758 static Py_complex tanh_special_values[7][7]; |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
759 |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
760 static Py_complex |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
761 c_tanh(Py_complex z) |
| 3334 | 762 { |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
763 /* Formula: |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
764 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
765 tanh(x+iy) = (tanh(x)(1+tan(y)^2) + i tan(y)(1-tanh(x))^2) / |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
766 (1+tan(y)^2 tanh(x)^2) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
767 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
768 To avoid excessive roundoff error, 1-tanh(x)^2 is better computed |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
769 as 1/cosh(x)^2. When abs(x) is large, we approximate 1-tanh(x)^2 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
770 by 4 exp(-2*x) instead, to avoid possible overflow in the |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
771 computation of cosh(x). |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
772 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
773 */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
774 |
| 3771 | 775 Py_complex r; |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
776 double tx, ty, cx, txty, denom; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
777 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
778 /* special treatment for tanh(+/-inf + iy) if y is finite and |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
779 nonzero */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
780 if (!Py_IS_FINITE(z.real) || !Py_IS_FINITE(z.imag)) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
781 if (Py_IS_INFINITY(z.real) && Py_IS_FINITE(z.imag) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
782 && (z.imag != 0.)) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
783 if (z.real > 0) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
784 r.real = 1.0; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
785 r.imag = copysign(0., |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
786 2.*sin(z.imag)*cos(z.imag)); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
787 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
788 else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
789 r.real = -1.0; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
790 r.imag = copysign(0., |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
791 2.*sin(z.imag)*cos(z.imag)); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
792 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
793 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
794 else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
795 r = tanh_special_values[special_type(z.real)] |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
796 [special_type(z.imag)]; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
797 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
798 /* need to set errno = EDOM if z.imag is +/-infinity and |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
799 z.real is finite */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
800 if (Py_IS_INFINITY(z.imag) && Py_IS_FINITE(z.real)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
801 errno = EDOM; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
802 else |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
803 errno = 0; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
804 return r; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
805 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
806 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
807 /* danger of overflow in 2.*z.imag !*/ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
808 if (fabs(z.real) > CM_LOG_LARGE_DOUBLE) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
809 r.real = copysign(1., z.real); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
810 r.imag = 4.*sin(z.imag)*cos(z.imag)*exp(-2.*fabs(z.real)); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
811 } else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
812 tx = tanh(z.real); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
813 ty = tan(z.imag); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
814 cx = 1./cosh(z.real); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
815 txty = tx*ty; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
816 denom = 1. + txty*txty; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
817 r.real = tx*(1.+ty*ty)/denom; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
818 r.imag = ((ty/denom)*cx)*cx; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
819 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
820 errno = 0; |
| 3334 | 821 return r; |
| 822 } | |
| 823 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
824 PyDoc_STRVAR(c_tanh_doc, |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
825 "tanh(x)\n" |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
826 "\n" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
827 "Return the hyperbolic tangent of x."); |
|
9593
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
828 |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
829 |
|
32350
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24471
diff
changeset
|
830 static PyObject * |
|
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24471
diff
changeset
|
831 cmath_log(PyObject *self, PyObject *args) |
|
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24471
diff
changeset
|
832 { |
|
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24471
diff
changeset
|
833 Py_complex x; |
|
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24471
diff
changeset
|
834 Py_complex y; |
|
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24471
diff
changeset
|
835 |
|
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24471
diff
changeset
|
836 if (!PyArg_ParseTuple(args, "D|D", &x, &y)) |
|
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24471
diff
changeset
|
837 return NULL; |
|
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24471
diff
changeset
|
838 |
|
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24471
diff
changeset
|
839 errno = 0; |
|
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24471
diff
changeset
|
840 PyFPE_START_PROTECT("complex function", return 0) |
|
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24471
diff
changeset
|
841 x = c_log(x); |
|
47890
f772476ad90d
Minor rewrite of cmath_log to work around a Sun compiler bug. See issue
Mark Dickinson <dickinsm@gmail.com>
parents:
47093
diff
changeset
|
842 if (PyTuple_GET_SIZE(args) == 2) { |
|
f772476ad90d
Minor rewrite of cmath_log to work around a Sun compiler bug. See issue
Mark Dickinson <dickinsm@gmail.com>
parents:
47093
diff
changeset
|
843 y = c_log(y); |
|
f772476ad90d
Minor rewrite of cmath_log to work around a Sun compiler bug. See issue
Mark Dickinson <dickinsm@gmail.com>
parents:
47093
diff
changeset
|
844 x = c_quot(x, y); |
|
f772476ad90d
Minor rewrite of cmath_log to work around a Sun compiler bug. See issue
Mark Dickinson <dickinsm@gmail.com>
parents:
47093
diff
changeset
|
845 } |
|
32350
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24471
diff
changeset
|
846 PyFPE_END_PROTECT(x) |
|
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24471
diff
changeset
|
847 if (errno != 0) |
|
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24471
diff
changeset
|
848 return math_error(); |
|
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24471
diff
changeset
|
849 return PyComplex_FromCComplex(x); |
|
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24471
diff
changeset
|
850 } |
|
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24471
diff
changeset
|
851 |
|
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24471
diff
changeset
|
852 PyDoc_STRVAR(cmath_log_doc, |
|
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24471
diff
changeset
|
853 "log(x[, base]) -> the logarithm of x to the given base.\n\ |
|
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24471
diff
changeset
|
854 If the base not specified, returns the natural logarithm (base e) of x."); |
|
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24471
diff
changeset
|
855 |
| 3334 | 856 |
| 857 /* And now the glue to make them available from Python: */ | |
| 858 | |
|
4639
97ec9dfbb2b6
Renamed Grandly
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
859 static PyObject * |
|
13651
8a063423e0b7
Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents:
13493
diff
changeset
|
860 math_error(void) |
| 3334 | 861 { |
| 862 if (errno == EDOM) | |
|
4639
97ec9dfbb2b6
Renamed Grandly
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
863 PyErr_SetString(PyExc_ValueError, "math domain error"); |
| 3334 | 864 else if (errno == ERANGE) |
|
4639
97ec9dfbb2b6
Renamed Grandly
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
865 PyErr_SetString(PyExc_OverflowError, "math range error"); |
|
97ec9dfbb2b6
Renamed Grandly
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
866 else /* Unexpected math error */ |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
867 PyErr_SetFromErrno(PyExc_ValueError); |
| 3334 | 868 return NULL; |
| 869 } | |
| 870 | |
|
4639
97ec9dfbb2b6
Renamed Grandly
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
871 static PyObject * |
|
13493
8bacf8631a11
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13447
diff
changeset
|
872 math_1(PyObject *args, Py_complex (*func)(Py_complex)) |
| 3334 | 873 { |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
874 Py_complex x,r ; |
| 3334 | 875 if (!PyArg_ParseTuple(args, "D", &x)) |
| 876 return NULL; | |
| 877 errno = 0; | |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
878 PyFPE_START_PROTECT("complex function", return 0); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
879 r = (*func)(x); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
880 PyFPE_END_PROTECT(r); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
881 if (errno == EDOM) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
882 PyErr_SetString(PyExc_ValueError, "math domain error"); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
883 return NULL; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
884 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
885 else if (errno == ERANGE) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
886 PyErr_SetString(PyExc_OverflowError, "math range error"); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
887 return NULL; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
888 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
889 else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
890 return PyComplex_FromCComplex(r); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
891 } |
| 3334 | 892 } |
| 893 | |
| 894 #define FUNC1(stubname, func) \ | |
|
13493
8bacf8631a11
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13447
diff
changeset
|
895 static PyObject * stubname(PyObject *self, PyObject *args) { \ |
| 3334 | 896 return math_1(args, func); \ |
| 897 } | |
| 898 | |
| 899 FUNC1(cmath_acos, c_acos) | |
| 900 FUNC1(cmath_acosh, c_acosh) | |
| 901 FUNC1(cmath_asin, c_asin) | |
| 902 FUNC1(cmath_asinh, c_asinh) | |
| 903 FUNC1(cmath_atan, c_atan) | |
| 904 FUNC1(cmath_atanh, c_atanh) | |
| 905 FUNC1(cmath_cos, c_cos) | |
| 906 FUNC1(cmath_cosh, c_cosh) | |
| 907 FUNC1(cmath_exp, c_exp) | |
| 908 FUNC1(cmath_log10, c_log10) | |
| 909 FUNC1(cmath_sin, c_sin) | |
| 910 FUNC1(cmath_sinh, c_sinh) | |
| 911 FUNC1(cmath_sqrt, c_sqrt) | |
| 912 FUNC1(cmath_tan, c_tan) | |
| 913 FUNC1(cmath_tanh, c_tanh) | |
| 914 | |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
915 static PyObject * |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
916 cmath_phase(PyObject *self, PyObject *args) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
917 { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
918 Py_complex z; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
919 double phi; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
920 if (!PyArg_ParseTuple(args, "D:phase", &z)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
921 return NULL; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
922 errno = 0; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
923 PyFPE_START_PROTECT("arg function", return 0) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
924 phi = c_atan2(z); |
|
47093
54fd0458550c
Following Amaury's advice
Christian Heimes <christian@cheimes.de>
parents:
47092
diff
changeset
|
925 PyFPE_END_PROTECT(phi) |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
926 if (errno != 0) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
927 return math_error(); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
928 else |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
929 return PyFloat_FromDouble(phi); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
930 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
931 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
932 PyDoc_STRVAR(cmath_phase_doc, |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
933 "phase(z) -> float\n\n\ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
934 Return argument, also known as the phase angle, of a complex."); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
935 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
936 static PyObject * |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
937 cmath_polar(PyObject *self, PyObject *args) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
938 { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
939 Py_complex z; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
940 double r, phi; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
941 if (!PyArg_ParseTuple(args, "D:polar", &z)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
942 return NULL; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
943 PyFPE_START_PROTECT("polar function", return 0) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
944 phi = c_atan2(z); /* should not cause any exception */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
945 r = c_abs(z); /* sets errno to ERANGE on overflow; otherwise 0 */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
946 PyFPE_END_PROTECT(r) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
947 if (errno != 0) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
948 return math_error(); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
949 else |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
950 return Py_BuildValue("dd", r, phi); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
951 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
952 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
953 PyDoc_STRVAR(cmath_polar_doc, |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
954 "polar(z) -> r: float, phi: float\n\n\ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
955 Convert a complex from rectangular coordinates to polar coordinates. r is\n\ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
956 the distance from 0 and phi the phase angle."); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
957 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
958 /* |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
959 rect() isn't covered by the C99 standard, but it's not too hard to |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
960 figure out 'spirit of C99' rules for special value handing: |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
961 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
962 rect(x, t) should behave like exp(log(x) + it) for positive-signed x |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
963 rect(x, t) should behave like -exp(log(-x) + it) for negative-signed x |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
964 rect(nan, t) should behave like exp(nan + it), except that rect(nan, 0) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
965 gives nan +- i0 with the sign of the imaginary part unspecified. |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
966 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
967 */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
968 |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
969 static Py_complex rect_special_values[7][7]; |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
970 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
971 static PyObject * |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
972 cmath_rect(PyObject *self, PyObject *args) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
973 { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
974 Py_complex z; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
975 double r, phi; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
976 if (!PyArg_ParseTuple(args, "dd:rect", &r, &phi)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
977 return NULL; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
978 errno = 0; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
979 PyFPE_START_PROTECT("rect function", return 0) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
980 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
981 /* deal with special values */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
982 if (!Py_IS_FINITE(r) || !Py_IS_FINITE(phi)) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
983 /* if r is +/-infinity and phi is finite but nonzero then |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
984 result is (+-INF +-INF i), but we need to compute cos(phi) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
985 and sin(phi) to figure out the signs. */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
986 if (Py_IS_INFINITY(r) && (Py_IS_FINITE(phi) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
987 && (phi != 0.))) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
988 if (r > 0) { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
989 z.real = copysign(INF, cos(phi)); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
990 z.imag = copysign(INF, sin(phi)); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
991 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
992 else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
993 z.real = -copysign(INF, cos(phi)); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
994 z.imag = -copysign(INF, sin(phi)); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
995 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
996 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
997 else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
998 z = rect_special_values[special_type(r)] |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
999 [special_type(phi)]; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1000 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1001 /* need to set errno = EDOM if r is a nonzero number and phi |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1002 is infinite */ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1003 if (r != 0. && !Py_IS_NAN(r) && Py_IS_INFINITY(phi)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1004 errno = EDOM; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1005 else |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1006 errno = 0; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1007 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1008 else { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1009 z.real = r * cos(phi); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1010 z.imag = r * sin(phi); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1011 errno = 0; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1012 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1013 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1014 PyFPE_END_PROTECT(z) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1015 if (errno != 0) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1016 return math_error(); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1017 else |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1018 return PyComplex_FromCComplex(z); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1019 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1020 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1021 PyDoc_STRVAR(cmath_rect_doc, |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1022 "rect(r, phi) -> z: complex\n\n\ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1023 Convert from polar coordinates to rectangular coordinates."); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1024 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1025 static PyObject * |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1026 cmath_isnan(PyObject *self, PyObject *args) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1027 { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1028 Py_complex z; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1029 if (!PyArg_ParseTuple(args, "D:isnan", &z)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1030 return NULL; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1031 return PyBool_FromLong(Py_IS_NAN(z.real) || Py_IS_NAN(z.imag)); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1032 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1033 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1034 PyDoc_STRVAR(cmath_isnan_doc, |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1035 "isnan(z) -> bool\n\ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1036 Checks if the real or imaginary part of z not a number (NaN)"); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1037 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1038 static PyObject * |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1039 cmath_isinf(PyObject *self, PyObject *args) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1040 { |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1041 Py_complex z; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1042 if (!PyArg_ParseTuple(args, "D:isnan", &z)) |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1043 return NULL; |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1044 return PyBool_FromLong(Py_IS_INFINITY(z.real) || |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1045 Py_IS_INFINITY(z.imag)); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1046 } |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1047 |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1048 PyDoc_STRVAR(cmath_isinf_doc, |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1049 "isinf(z) -> bool\n\ |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1050 Checks if the real or imaginary part of z is infinite."); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1051 |
| 3334 | 1052 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
1053 PyDoc_STRVAR(module_doc, |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
1054 "This module is always available. It provides access to mathematical\n" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
22722
diff
changeset
|
1055 "functions for complex numbers."); |
|
9593
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
1056 |
|
4639
97ec9dfbb2b6
Renamed Grandly
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
1057 static PyMethodDef cmath_methods[] = { |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
1058 {"acos", cmath_acos, METH_VARARGS, c_acos_doc}, |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
1059 {"acosh", cmath_acosh, METH_VARARGS, c_acosh_doc}, |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
1060 {"asin", cmath_asin, METH_VARARGS, c_asin_doc}, |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
1061 {"asinh", cmath_asinh, METH_VARARGS, c_asinh_doc}, |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
1062 {"atan", cmath_atan, METH_VARARGS, c_atan_doc}, |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
1063 {"atanh", cmath_atanh, METH_VARARGS, c_atanh_doc}, |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
1064 {"cos", cmath_cos, METH_VARARGS, c_cos_doc}, |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
1065 {"cosh", cmath_cosh, METH_VARARGS, c_cosh_doc}, |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
1066 {"exp", cmath_exp, METH_VARARGS, c_exp_doc}, |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1067 {"isinf", cmath_isinf, METH_VARARGS, cmath_isinf_doc}, |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1068 {"isnan", cmath_isnan, METH_VARARGS, cmath_isnan_doc}, |
|
32350
11c31a98dfd6
Patch #826074: cmath.log optional base argument, fixes #823209
Raymond Hettinger <python@rcn.com>
parents:
24471
diff
changeset
|
1069 {"log", cmath_log, METH_VARARGS, cmath_log_doc}, |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
1070 {"log10", cmath_log10, METH_VARARGS, c_log10_doc}, |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1071 {"phase", cmath_phase, METH_VARARGS, cmath_phase_doc}, |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1072 {"polar", cmath_polar, METH_VARARGS, cmath_polar_doc}, |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1073 {"rect", cmath_rect, METH_VARARGS, cmath_rect_doc}, |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
1074 {"sin", cmath_sin, METH_VARARGS, c_sin_doc}, |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
1075 {"sinh", cmath_sinh, METH_VARARGS, c_sinh_doc}, |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
1076 {"sqrt", cmath_sqrt, METH_VARARGS, c_sqrt_doc}, |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
1077 {"tan", cmath_tan, METH_VARARGS, c_tan_doc}, |
|
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
1078 {"tanh", cmath_tanh, METH_VARARGS, c_tanh_doc}, |
| 3334 | 1079 {NULL, NULL} /* sentinel */ |
| 1080 }; | |
| 1081 | |
|
24471
f66b3a3509c7
Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype
Mark Hammond <mhammond@skippinet.com.au>
parents:
24280
diff
changeset
|
1082 PyMODINIT_FUNC |
|
13651
8a063423e0b7
Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents:
13493
diff
changeset
|
1083 initcmath(void) |
| 3334 | 1084 { |
|
22722
ba68dda15df0
Use the PyModule_*() API instead of manipulating the module dictionary
Fred Drake <fdrake@acm.org>
parents:
22227
diff
changeset
|
1085 PyObject *m; |
|
16707
9696c95d09b7
Mechanical edits just so I can read it.
Tim Peters <tim.peters@gmail.com>
parents:
13817
diff
changeset
|
1086 |
|
9593
f22f769bf3d9
Added Doc strings -- by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
1087 m = Py_InitModule3("cmath", cmath_methods, module_doc); |
|
36324
1af7f719ed28
Check return result from Py_InitModule*(). This API can fail.
Neal Norwitz <nnorwitz@gmail.com>
parents:
32350
diff
changeset
|
1088 if (m == NULL) |
|
1af7f719ed28
Check return result from Py_InitModule*(). This API can fail.
Neal Norwitz <nnorwitz@gmail.com>
parents:
32350
diff
changeset
|
1089 return; |
|
22722
ba68dda15df0
Use the PyModule_*() API instead of manipulating the module dictionary
Fred Drake <fdrake@acm.org>
parents:
22227
diff
changeset
|
1090 |
|
ba68dda15df0
Use the PyModule_*() API instead of manipulating the module dictionary
Fred Drake <fdrake@acm.org>
parents:
22227
diff
changeset
|
1091 PyModule_AddObject(m, "pi", |
|
46477
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1092 PyFloat_FromDouble(Py_MATH_PI)); |
|
b69f443ef480
Merged revisions 62380,62382-62383 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
36324
diff
changeset
|
1093 PyModule_AddObject(m, "e", PyFloat_FromDouble(Py_MATH_E)); |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1094 |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1095 /* initialize special value tables */ |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1096 |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1097 #define INIT_SPECIAL_VALUES(NAME, BODY) { Py_complex* p = (Py_complex*)NAME; BODY } |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1098 #define C(REAL, IMAG) p->real = REAL; p->imag = IMAG; ++p; |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1099 |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1100 INIT_SPECIAL_VALUES(acos_special_values, { |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1101 C(P34,INF) C(P,INF) C(P,INF) C(P,-INF) C(P,-INF) C(P34,-INF) C(N,INF) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1102 C(P12,INF) C(U,U) C(U,U) C(U,U) C(U,U) C(P12,-INF) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1103 C(P12,INF) C(U,U) C(P12,0.) C(P12,-0.) C(U,U) C(P12,-INF) C(P12,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1104 C(P12,INF) C(U,U) C(P12,0.) C(P12,-0.) C(U,U) C(P12,-INF) C(P12,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1105 C(P12,INF) C(U,U) C(U,U) C(U,U) C(U,U) C(P12,-INF) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1106 C(P14,INF) C(0.,INF) C(0.,INF) C(0.,-INF) C(0.,-INF) C(P14,-INF) C(N,INF) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1107 C(N,INF) C(N,N) C(N,N) C(N,N) C(N,N) C(N,-INF) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1108 }) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1109 |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1110 INIT_SPECIAL_VALUES(acosh_special_values, { |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1111 C(INF,-P34) C(INF,-P) C(INF,-P) C(INF,P) C(INF,P) C(INF,P34) C(INF,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1112 C(INF,-P12) C(U,U) C(U,U) C(U,U) C(U,U) C(INF,P12) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1113 C(INF,-P12) C(U,U) C(0.,-P12) C(0.,P12) C(U,U) C(INF,P12) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1114 C(INF,-P12) C(U,U) C(0.,-P12) C(0.,P12) C(U,U) C(INF,P12) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1115 C(INF,-P12) C(U,U) C(U,U) C(U,U) C(U,U) C(INF,P12) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1116 C(INF,-P14) C(INF,-0.) C(INF,-0.) C(INF,0.) C(INF,0.) C(INF,P14) C(INF,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1117 C(INF,N) C(N,N) C(N,N) C(N,N) C(N,N) C(INF,N) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1118 }) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1119 |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1120 INIT_SPECIAL_VALUES(asinh_special_values, { |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1121 C(-INF,-P14) C(-INF,-0.) C(-INF,-0.) C(-INF,0.) C(-INF,0.) C(-INF,P14) C(-INF,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1122 C(-INF,-P12) C(U,U) C(U,U) C(U,U) C(U,U) C(-INF,P12) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1123 C(-INF,-P12) C(U,U) C(-0.,-0.) C(-0.,0.) C(U,U) C(-INF,P12) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1124 C(INF,-P12) C(U,U) C(0.,-0.) C(0.,0.) C(U,U) C(INF,P12) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1125 C(INF,-P12) C(U,U) C(U,U) C(U,U) C(U,U) C(INF,P12) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1126 C(INF,-P14) C(INF,-0.) C(INF,-0.) C(INF,0.) C(INF,0.) C(INF,P14) C(INF,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1127 C(INF,N) C(N,N) C(N,-0.) C(N,0.) C(N,N) C(INF,N) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1128 }) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1129 |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1130 INIT_SPECIAL_VALUES(atanh_special_values, { |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1131 C(-0.,-P12) C(-0.,-P12) C(-0.,-P12) C(-0.,P12) C(-0.,P12) C(-0.,P12) C(-0.,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1132 C(-0.,-P12) C(U,U) C(U,U) C(U,U) C(U,U) C(-0.,P12) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1133 C(-0.,-P12) C(U,U) C(-0.,-0.) C(-0.,0.) C(U,U) C(-0.,P12) C(-0.,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1134 C(0.,-P12) C(U,U) C(0.,-0.) C(0.,0.) C(U,U) C(0.,P12) C(0.,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1135 C(0.,-P12) C(U,U) C(U,U) C(U,U) C(U,U) C(0.,P12) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1136 C(0.,-P12) C(0.,-P12) C(0.,-P12) C(0.,P12) C(0.,P12) C(0.,P12) C(0.,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1137 C(0.,-P12) C(N,N) C(N,N) C(N,N) C(N,N) C(0.,P12) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1138 }) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1139 |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1140 INIT_SPECIAL_VALUES(cosh_special_values, { |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1141 C(INF,N) C(U,U) C(INF,0.) C(INF,-0.) C(U,U) C(INF,N) C(INF,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1142 C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1143 C(N,0.) C(U,U) C(1.,0.) C(1.,-0.) C(U,U) C(N,0.) C(N,0.) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1144 C(N,0.) C(U,U) C(1.,-0.) C(1.,0.) C(U,U) C(N,0.) C(N,0.) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1145 C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1146 C(INF,N) C(U,U) C(INF,-0.) C(INF,0.) C(U,U) C(INF,N) C(INF,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1147 C(N,N) C(N,N) C(N,0.) C(N,0.) C(N,N) C(N,N) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1148 }) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1149 |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1150 INIT_SPECIAL_VALUES(exp_special_values, { |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1151 C(0.,0.) C(U,U) C(0.,-0.) C(0.,0.) C(U,U) C(0.,0.) C(0.,0.) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1152 C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1153 C(N,N) C(U,U) C(1.,-0.) C(1.,0.) C(U,U) C(N,N) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1154 C(N,N) C(U,U) C(1.,-0.) C(1.,0.) C(U,U) C(N,N) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1155 C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1156 C(INF,N) C(U,U) C(INF,-0.) C(INF,0.) C(U,U) C(INF,N) C(INF,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1157 C(N,N) C(N,N) C(N,-0.) C(N,0.) C(N,N) C(N,N) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1158 }) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1159 |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1160 INIT_SPECIAL_VALUES(log_special_values, { |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1161 C(INF,-P34) C(INF,-P) C(INF,-P) C(INF,P) C(INF,P) C(INF,P34) C(INF,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1162 C(INF,-P12) C(U,U) C(U,U) C(U,U) C(U,U) C(INF,P12) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1163 C(INF,-P12) C(U,U) C(-INF,-P) C(-INF,P) C(U,U) C(INF,P12) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1164 C(INF,-P12) C(U,U) C(-INF,-0.) C(-INF,0.) C(U,U) C(INF,P12) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1165 C(INF,-P12) C(U,U) C(U,U) C(U,U) C(U,U) C(INF,P12) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1166 C(INF,-P14) C(INF,-0.) C(INF,-0.) C(INF,0.) C(INF,0.) C(INF,P14) C(INF,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1167 C(INF,N) C(N,N) C(N,N) C(N,N) C(N,N) C(INF,N) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1168 }) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1169 |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1170 INIT_SPECIAL_VALUES(sinh_special_values, { |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1171 C(INF,N) C(U,U) C(-INF,-0.) C(-INF,0.) C(U,U) C(INF,N) C(INF,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1172 C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1173 C(0.,N) C(U,U) C(-0.,-0.) C(-0.,0.) C(U,U) C(0.,N) C(0.,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1174 C(0.,N) C(U,U) C(0.,-0.) C(0.,0.) C(U,U) C(0.,N) C(0.,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1175 C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1176 C(INF,N) C(U,U) C(INF,-0.) C(INF,0.) C(U,U) C(INF,N) C(INF,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1177 C(N,N) C(N,N) C(N,-0.) C(N,0.) C(N,N) C(N,N) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1178 }) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1179 |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1180 INIT_SPECIAL_VALUES(sqrt_special_values, { |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1181 C(INF,-INF) C(0.,-INF) C(0.,-INF) C(0.,INF) C(0.,INF) C(INF,INF) C(N,INF) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1182 C(INF,-INF) C(U,U) C(U,U) C(U,U) C(U,U) C(INF,INF) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1183 C(INF,-INF) C(U,U) C(0.,-0.) C(0.,0.) C(U,U) C(INF,INF) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1184 C(INF,-INF) C(U,U) C(0.,-0.) C(0.,0.) C(U,U) C(INF,INF) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1185 C(INF,-INF) C(U,U) C(U,U) C(U,U) C(U,U) C(INF,INF) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1186 C(INF,-INF) C(INF,-0.) C(INF,-0.) C(INF,0.) C(INF,0.) C(INF,INF) C(INF,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1187 C(INF,-INF) C(N,N) C(N,N) C(N,N) C(N,N) C(INF,INF) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1188 }) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1189 |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1190 INIT_SPECIAL_VALUES(tanh_special_values, { |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1191 C(-1.,0.) C(U,U) C(-1.,-0.) C(-1.,0.) C(U,U) C(-1.,0.) C(-1.,0.) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1192 C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1193 C(N,N) C(U,U) C(-0.,-0.) C(-0.,0.) C(U,U) C(N,N) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1194 C(N,N) C(U,U) C(0.,-0.) C(0.,0.) C(U,U) C(N,N) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1195 C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1196 C(1.,0.) C(U,U) C(1.,-0.) C(1.,0.) C(U,U) C(1.,0.) C(1.,0.) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1197 C(N,N) C(N,N) C(N,-0.) C(N,0.) C(N,N) C(N,N) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1198 }) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1199 |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1200 INIT_SPECIAL_VALUES(rect_special_values, { |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1201 C(INF,N) C(U,U) C(-INF,0.) C(-INF,-0.) C(U,U) C(INF,N) C(INF,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1202 C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1203 C(0.,0.) C(U,U) C(-0.,0.) C(-0.,-0.) C(U,U) C(0.,0.) C(0.,0.) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1204 C(0.,0.) C(U,U) C(0.,-0.) C(0.,0.) C(U,U) C(0.,0.) C(0.,0.) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1205 C(N,N) C(U,U) C(U,U) C(U,U) C(U,U) C(N,N) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1206 C(INF,N) C(U,U) C(INF,-0.) C(INF,0.) C(U,U) C(INF,N) C(INF,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1207 C(N,N) C(N,N) C(N,0.) C(N,0.) C(N,N) C(N,N) C(N,N) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46477
diff
changeset
|
1208 }) |
| 3334 | 1209 } |
