annotate src/mingw-w64-complex-inverse-trig.patch @ 6388:dbc29160e2b2

mingw-w64: Update patch with changes applied upstream (bug #49091). * src/mingw-w64-complex-inverse-trig.patch: Use "signbit" macro correctly.
author Markus Mützel <markus.muetzel@gmx.de>
date Sat, 27 Aug 2022 13:05:12 +0200
parents dc5ad8056086
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6335
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
1 From 59fd6e6ab7c93545175fa6ff46532b7a80dbdbfb Mon Sep 17 00:00:00 2001
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
2 From: =?UTF-8?q?Markus=20M=C3=BCtzel?= <markus.muetzel@gmx.de>
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
3 Date: Sat, 23 Jul 2022 15:30:46 +0200
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
4 Subject: [PATCH 1/2] casinh: Use approximation for large input.
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
5
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
6 ---
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
7 mingw-w64-crt/complex/casinh.def.h | 21 +++++++++++++++++++++
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
8 1 file changed, 21 insertions(+)
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
9
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
10 diff --git a/mingw-w64-crt/complex/casinh.def.h b/mingw-w64-crt/complex/casinh.def.h
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
11 index 050d885a0..cce2d864e 100644
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
12 --- a/mingw-w64-crt/complex/casinh.def.h
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
13 +++ b/mingw-w64-crt/complex/casinh.def.h
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
14 @@ -87,6 +87,27 @@ __FLT_ABI(casinh) (__FLT_TYPE __complex__ z)
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
15 if (r_class == FP_ZERO && i_class == FP_ZERO)
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
16 return z;
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
17
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
18 + /* casinh(z) = log(z + sqrt(z*z + 1)) */
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
19 +
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
20 + if (__FLT_ABI(fabs) (__real__ z) >= __FLT_CST(1.0)/__FLT_EPSILON
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
21 + || __FLT_ABI(fabs) (__imag__ z) >= __FLT_CST(1.0)/__FLT_EPSILON)
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
22 + {
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
23 + /* For large z, z + sqrt(z*z + 1) is approximately 2*z.
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
24 + Use that approximation to avoid overflow when squaring.
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
25 + Additionally, use symmetries to perform the calculation in the first
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
26 + quadrant. */
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
27 + __real__ x = __FLT_ABI(fabs) (__real__ z);
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
28 + __imag__ x = __FLT_ABI(fabs) (__imag__ z);
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
29 + x = __FLT_ABI(clog) (x);
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
30 + __real__ x += M_LN2;
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
31 +
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
32 + /* adjust signs for input quadrant */
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
33 + __real__ ret = __FLT_ABI(copysign) (__real__ x, __real__ z);
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
34 + __imag__ ret = __FLT_ABI(copysign) (__imag__ x, __imag__ z);
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
35 +
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
36 + return ret;
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
37 + }
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
38 +
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
39 __real__ x = (__real__ z - __imag__ z) * (__real__ z + __imag__ z) + __FLT_CST(1.0);
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
40 __imag__ x = __FLT_CST(2.0) * __real__ z * __imag__ z;
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
41
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
42 --
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
43 2.35.3.windows.1
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
44
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
45 From 4b5a229573ca98a622cc15d20bd561dbaec9bbfc Mon Sep 17 00:00:00 2001
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
46 From: =?UTF-8?q?Markus=20M=C3=BCtzel?= <markus.muetzel@gmx.de>
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
47 Date: Sat, 23 Jul 2022 18:01:29 +0200
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
48 Subject: [PATCH 2/2] cacosh: Use approximation for large input.
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
49
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
50 ---
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
51 mingw-w64-crt/complex/cacosh.def.h | 21 +++++++++++++++++++++
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
52 1 file changed, 21 insertions(+)
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
53
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
54 diff --git a/mingw-w64-crt/complex/cacosh.def.h b/mingw-w64-crt/complex/cacosh.def.h
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
55 index f4ea2da07..a3edd5288 100644
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
56 --- a/mingw-w64-crt/complex/cacosh.def.h
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
57 +++ b/mingw-w64-crt/complex/cacosh.def.h
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
58 @@ -80,6 +80,27 @@ __FLT_ABI(cacosh) (__FLT_TYPE __complex__ z)
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
59 return ret;
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
60 }
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
61
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
62 + /* cacosh(z) = log(z + sqrt(z*z - 1)) */
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
63 +
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
64 + if (__FLT_ABI(fabs) (__real__ z) >= __FLT_CST(1.0)/__FLT_EPSILON
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
65 + || __FLT_ABI(fabs) (__imag__ z) >= __FLT_CST(1.0)/__FLT_EPSILON)
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
66 + {
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
67 + /* For large z, z + sqrt(z*z - 1) is approximately 2*z.
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
68 + Use that approximation to avoid overflow when squaring.
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
69 + Additionally, use symmetries to perform the calculation in the positive
6354
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
70 + half plane. */
6335
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
71 + __real__ x = __real__ z;
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
72 + __imag__ x = __FLT_ABI(fabs) (__imag__ z);
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
73 + x = __FLT_ABI(clog) (x);
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
74 + __real__ x += M_LN2;
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
75 +
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
76 + /* adjust signs for input */
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
77 + __real__ ret = __real__ x;
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
78 + __imag__ ret = __FLT_ABI(copysign) (__imag__ x, __imag__ z);
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
79 +
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
80 + return ret;
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
81 + }
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
82 +
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
83 __real__ x = (__real__ z - __imag__ z) * (__real__ z + __imag__ z) - __FLT_CST(1.0);
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
84 __imag__ x = __FLT_CST(2.0) * __real__ z * __imag__ z;
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
85
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
86 --
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
87 2.35.3.windows.1
0825abaf61a7 mingw-w64: Special case for large input for complex inverse trigonometric functions (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
88
6354
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
89 From 9fcac91fc50120a5e6acfa94ba0a917c7faf2306 Mon Sep 17 00:00:00 2001
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
90 From: =?UTF-8?q?Markus=20M=C3=BCtzel?= <markus.muetzel@gmx.de>
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
91 Date: Fri, 5 Aug 2022 18:36:49 +0200
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
92 Subject: [PATCH] cacosh: Handle negative zero input
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
93
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
94 ---
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
95 mingw-w64-crt/complex/cacosh.def.h | 4 ++--
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
96 1 file changed, 2 insertions(+), 2 deletions(-)
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
97
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
98 diff --git a/mingw-w64-crt/complex/cacosh.def.h b/mingw-w64-crt/complex/cacosh.def.h
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
99 index 1f03befae..addf2958e 100644
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
100 --- a/mingw-w64-crt/complex/cacosh.def.h
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
101 +++ b/mingw-w64-crt/complex/cacosh.def.h
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
102 @@ -106,7 +106,7 @@ __FLT_ABI(cacosh) (__FLT_TYPE __complex__ z)
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
103
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
104 x = __FLT_ABI(csqrt) (x);
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
105
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
106 - if (__real__ z < __FLT_CST(0.0))
6388
dbc29160e2b2 mingw-w64: Update patch with changes applied upstream (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6357
diff changeset
107 + if (signbit (__real__ z))
6354
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
108 x = -x;
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
109
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
110 __real__ x += __real__ z;
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
111 @@ -114,7 +114,7 @@ __FLT_ABI(cacosh) (__FLT_TYPE __complex__ z)
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
112
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
113 ret = __FLT_ABI(clog) (x);
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
114
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
115 - if (__real__ ret < __FLT_CST(0.0))
6388
dbc29160e2b2 mingw-w64: Update patch with changes applied upstream (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6357
diff changeset
116 + if (signbit (__real__ ret))
6354
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
117 ret = -ret;
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
118
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
119 return ret;
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
120 --
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
121 2.35.3.windows.1
9d1395334e68 mingw-w64: Handle negative zero input for cacosh (bug #49091).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6335
diff changeset
122
6357
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
123 From cddd2eb87270f368d18f79a1070a36e4dc5464eb Mon Sep 17 00:00:00 2001
6356
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
124 From: =?UTF-8?q?Markus=20M=C3=BCtzel?= <markus.muetzel@gmx.de>
6357
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
125 Date: Mon, 8 Aug 2022 18:01:32 +0200
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
126 Subject: [PATCH 1/3] casinh: Use symmetries also for default case.
6356
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
127
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
128 ---
6357
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
129 mingw-w64-crt/complex/casinh.def.h | 47 +++++++++++++++++-------------
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
130 1 file changed, 26 insertions(+), 21 deletions(-)
6356
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
131
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
132 diff --git a/mingw-w64-crt/complex/casinh.def.h b/mingw-w64-crt/complex/casinh.def.h
6357
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
133 index cce2d864e..40ff67579 100644
6356
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
134 --- a/mingw-w64-crt/complex/casinh.def.h
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
135 +++ b/mingw-w64-crt/complex/casinh.def.h
6357
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
136 @@ -47,6 +47,7 @@ __FLT_ABI(casinh) (__FLT_TYPE __complex__ z)
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
137 {
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
138 __complex__ __FLT_TYPE ret;
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
139 __complex__ __FLT_TYPE x;
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
140 + __FLT_TYPE arz, aiz;
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
141 int r_class = fpclassify (__real__ z);
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
142 int i_class = fpclassify (__imag__ z);
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
143
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
144 @@ -89,32 +90,36 @@ __FLT_ABI(casinh) (__FLT_TYPE __complex__ z)
6356
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
145
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
146 /* casinh(z) = log(z + sqrt(z*z + 1)) */
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
147
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
148 - if (__FLT_ABI(fabs) (__real__ z) >= __FLT_CST(1.0)/__FLT_EPSILON
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
149 - || __FLT_ABI(fabs) (__imag__ z) >= __FLT_CST(1.0)/__FLT_EPSILON)
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
150 + /* Use symmetries to perform the calculation in the first quadrant. */
6357
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
151 + arz = __FLT_ABI(fabs) (__real__ z);
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
152 + aiz = __FLT_ABI(fabs) (__imag__ z);
6356
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
153 +
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
154 + if (arz >= __FLT_CST(1.0)/__FLT_EPSILON
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
155 + || aiz >= __FLT_CST(1.0)/__FLT_EPSILON)
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
156 {
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
157 /* For large z, z + sqrt(z*z + 1) is approximately 2*z.
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
158 - Use that approximation to avoid overflow when squaring.
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
159 - Additionally, use symmetries to perform the calculation in the first
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
160 - quadrant. */
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
161 - __real__ x = __FLT_ABI(fabs) (__real__ z);
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
162 - __imag__ x = __FLT_ABI(fabs) (__imag__ z);
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
163 - x = __FLT_ABI(clog) (x);
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
164 - __real__ x += M_LN2;
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
165 -
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
166 - /* adjust signs for input quadrant */
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
167 - __real__ ret = __FLT_ABI(copysign) (__real__ x, __real__ z);
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
168 - __imag__ ret = __FLT_ABI(copysign) (__imag__ x, __imag__ z);
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
169 -
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
170 - return ret;
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
171 + Use that approximation to avoid overflow when squaring. */
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
172 + __real__ x = arz;
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
173 + __imag__ x = aiz;
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
174 + ret = __FLT_ABI(clog) (x);
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
175 + __real__ ret += M_LN2;
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
176 }
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
177 + else
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
178 + {
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
179 + __real__ x = (arz - aiz) * (arz + aiz) + __FLT_CST(1.0);
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
180 + __imag__ x = __FLT_CST(2.0) * arz * aiz;
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
181 +
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
182 + x = __FLT_ABI(csqrt) (x);
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
183
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
184 - __real__ x = (__real__ z - __imag__ z) * (__real__ z + __imag__ z) + __FLT_CST(1.0);
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
185 - __imag__ x = __FLT_CST(2.0) * __real__ z * __imag__ z;
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
186 + __real__ x += arz;
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
187 + __imag__ x += aiz;
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
188
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
189 - x = __FLT_ABI(csqrt) (x);
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
190 + ret = __FLT_ABI(clog) (x);
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
191 + }
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
192
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
193 - __real__ x += __real__ z;
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
194 - __imag__ x += __imag__ z;
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
195 + /* adjust signs for input quadrant */
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
196 + __real__ ret = __FLT_ABI(copysign) (__real__ ret, __real__ z);
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
197 + __imag__ ret = __FLT_ABI(copysign) (__imag__ ret, __imag__ z);
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
198
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
199 - return __FLT_ABI(clog) (x);
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
200 + return ret;
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
201 }
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
202 --
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
203 2.35.3.windows.1
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
204
6357
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
205 From f309692d67674526ec9a87ecae527cb6c207cf93 Mon Sep 17 00:00:00 2001
6356
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
206 From: =?UTF-8?q?Markus=20M=C3=BCtzel?= <markus.muetzel@gmx.de>
6357
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
207 Date: Mon, 8 Aug 2022 18:02:40 +0200
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
208 Subject: [PATCH 2/3] casinh: Use approximations for small real part and
6356
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
209 absolute imaginary part < 1
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
210
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
211 ---
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
212 mingw-w64-crt/complex/casinh.def.h | 31 ++++++++++++++++++++++++++++++
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
213 1 file changed, 31 insertions(+)
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
214
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
215 diff --git a/mingw-w64-crt/complex/casinh.def.h b/mingw-w64-crt/complex/casinh.def.h
6357
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
216 index 40ff67579..8d61b1399 100644
6356
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
217 --- a/mingw-w64-crt/complex/casinh.def.h
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
218 +++ b/mingw-w64-crt/complex/casinh.def.h
6357
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
219 @@ -104,6 +104,37 @@ __FLT_ABI(casinh) (__FLT_TYPE __complex__ z)
6356
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
220 ret = __FLT_ABI(clog) (x);
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
221 __real__ ret += M_LN2;
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
222 }
6357
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
223 + else if (arz <= __FLT_EPSILON && aiz < __FLT_CST(1.0))
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
224 + {
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
225 + /* Taylor series expansion around arz=0 for z + sqrt(z*z + 1):
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
226 + c = arz + sqrt(1-aiz^2) + i*(aiz + arz*aiz / sqrt(1-aiz^2)) + O(arz^2)
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
227 + Identity: clog(c) = log(|c|) + i*arg(c)
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
228 + For real part of result:
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
229 + |c| = 1 + arz / sqrt(1-aiz^2) + O(arz^2) (Taylor series expansion)
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
230 + For imaginary part of result:
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
231 + c = (arz + sqrt(1-aiz^2))/sqrt(1-aiz^2) * (sqrt(1-aiz^2) + i*aiz) + O(arz^6)
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
232 + */
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
233 + __FLT_TYPE s1maiz2 = __FLT_ABI(sqrt) ((__FLT_CST(1.0)+aiz)*(__FLT_CST(1.0)-aiz));
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
234 + __real__ ret = __FLT_ABI(log1p) (arz / s1maiz2);
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
235 + __imag__ ret = __FLT_ABI(atan2) (aiz, s1maiz2);
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
236 + }
6356
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
237 + else if (arz*arz <= __FLT_EPSILON && aiz < __FLT_CST(1.0))
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
238 + {
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
239 + /* Taylor series expansion around arz=0 for z + sqrt(z*z + 1):
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
240 + c = arz + sqrt(1-aiz^2) + arz^2 / (2*(1-aiz^2)^(3/2)) + i*(aiz + arz*aiz / sqrt(1-aiz^2)) + O(arz^4)
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
241 + Identity: clog(c) = log(|c|) + i*arg(c)
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
242 + For real part of result:
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
243 + |c| = 1 + arz / sqrt(1-aiz^2) + arz^2/(2*(1-aiz^2)) + O(arz^3) (Taylor series expansion)
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
244 + For imaginary part of result:
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
245 + c = 1/sqrt(1-aiz^2) * ((1-aiz^2) + arz*sqrt(1-aiz^2) + arz^2/(2*(1-aiz^2)) + i*aiz*(sqrt(1-aiz^2)+arz)) + O(arz^3)
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
246 + */
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
247 + __FLT_TYPE onemaiz2 = (__FLT_CST(1.0)+aiz)*(__FLT_CST(1.0)-aiz);
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
248 + __FLT_TYPE s1maiz2 = __FLT_ABI(sqrt) (onemaiz2);
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
249 + __FLT_TYPE arz2red = arz * arz / __FLT_CST(2.0) / s1maiz2;
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
250 + __real__ ret = __FLT_ABI(log1p) ((arz + arz2red) / s1maiz2);
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
251 + __imag__ ret = __FLT_ABI(atan2) (aiz * (s1maiz2 + arz),
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
252 + onemaiz2 + arz*s1maiz2 + arz2red);
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
253 + }
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
254 else
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
255 {
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
256 __real__ x = (arz - aiz) * (arz + aiz) + __FLT_CST(1.0);
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
257 --
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
258 2.35.3.windows.1
6f3c099c0d38 mingw-w64: Use approximations for casinh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6354
diff changeset
259
6357
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
260 From b2ad7c96b759e8bc3af504018b70c91c8b0f135c Mon Sep 17 00:00:00 2001
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
261 From: =?UTF-8?q?Markus=20M=C3=BCtzel?= <markus.muetzel@gmx.de>
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
262 Date: Mon, 8 Aug 2022 18:03:49 +0200
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
263 Subject: [PATCH 3/3] catanh: Use approximations for small real part
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
264
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
265 ---
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
266 mingw-w64-crt/complex/catanh.def.h | 37 +++++++++++++++++++++++++-----
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
267 1 file changed, 31 insertions(+), 6 deletions(-)
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
268
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
269 From 7589dfe1f5478a3ba7b93ea6dc28fc0ffd271f12 Mon Sep 17 00:00:00 2001
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
270 From: =?UTF-8?q?Markus=20M=C3=BCtzel?= <markus.muetzel@gmx.de>
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
271 Date: Mon, 8 Aug 2022 18:26:20 +0200
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
272 Subject: [PATCH 3/3] catanh: Use approximations for small real part
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
273
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
274 ---
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
275 mingw-w64-crt/complex/catanh.def.h | 37 +++++++++++++++++++++++++-----
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
276 1 file changed, 31 insertions(+), 6 deletions(-)
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
277
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
278 diff --git a/mingw-w64-crt/complex/catanh.def.h b/mingw-w64-crt/complex/catanh.def.h
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
279 index 68949d139..1d46d4dcd 100644
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
280 --- a/mingw-w64-crt/complex/catanh.def.h
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
281 +++ b/mingw-w64-crt/complex/catanh.def.h
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
282 @@ -75,17 +75,42 @@ __FLT_ABI(catanh) (__FLT_TYPE __complex__ z)
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
283 if (r_class == FP_ZERO && i_class == FP_ZERO)
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
284 return z;
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
285
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
286 + /* catanh(z) = 1/2 * clog(1+z) - 1/2 * clog(1-z) = 1/2 * clog((1+z)/(1-z)) */
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
287 +
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
288 + /* Use identity clog(c) = 1/2*log(|c|^2) + i*arg(c) to calculate real and
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
289 + imaginary parts separately. */
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
290 +
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
291 + /* real part */
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
292 + /* |c|^2 = (Im(z)^2 + (1+Re(z))^2)/(Im(z)^2 + (1-Re(z))^2) */
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
293 i2 = __imag__ z * __imag__ z;
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
294
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
295 - n = __FLT_CST(1.0) + __real__ z;
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
296 - n = i2 + n * n;
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
297 + if (__FLT_ABI(fabs) (__real__ z) <= __FLT_EPSILON)
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
298 + {
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
299 + /* |c|^2 = 1 + 4*Re(z)/(1+Im(z)^2) + O(Re(z)^2) (Taylor series) */
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
300 + __real__ ret = __FLT_CST(0.25) *
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
301 + __FLT_ABI(log1p) (__FLT_CST(4.0)*(__real__ z) / (__FLT_CST(1.0) + i2));
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
302 + }
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
303 + else if ((__real__ z)*(__real__ z) <= __FLT_EPSILON)
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
304 + {
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
305 + /* |c|^2 = 1 + 4*Re(z)/(1+Im(z)^2) + 8*Re(z)^2/(1+Im(z)^2)^2 + O(Re(z)^3) (Taylor series) */
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
306 + d = __real__ z / (__FLT_CST(1.0) + i2);
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
307 + __real__ ret = __FLT_CST(0.25) *
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
308 + __FLT_ABI(log1p) (__FLT_CST(4.0) * d * (__FLT_CST(1.0) + __FLT_CST(2.0) * d));
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
309 + }
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
310 + else
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
311 + {
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
312 + n = __FLT_CST(1.0) + __real__ z;
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
313 + n = i2 + n * n;
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
314
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
315 - d = __FLT_CST(1.0) - __real__ z;
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
316 - d = i2 + d * d;
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
317 + d = __FLT_CST(1.0) - __real__ z;
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
318 + d = i2 + d * d;
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
319
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
320 - __real__ ret = __FLT_CST(0.25) * (__FLT_ABI(log) (n) - __FLT_ABI(log) (d));
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
321 + __real__ ret = __FLT_CST(0.25) * (__FLT_ABI(log) (n) - __FLT_ABI(log) (d));
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
322 + }
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
323
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
324 - d = 1 - __real__ z * __real__ z - i2;
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
325 + /* imaginary part */
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
326 + /* z = (1 - Re(z)^2 - Im(z)^2 + 2i * Im(z) / ((1-Re(z))^2 + Im(z)^2) */
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
327 + d = __FLT_CST(1.0) - __real__ z * __real__ z - i2;
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
328
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
329 __imag__ ret = __FLT_CST(0.5) * __FLT_ABI(atan2) (__FLT_CST(2.0) * __imag__ z, d);
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
330
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
331 --
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
332 2.35.3.windows.1
dc5ad8056086 mingw-w64: Use approximations for catanh if real part is small (bug #62332).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6356
diff changeset
333