Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
wine
Manage
Activity
Members
Labels
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Package registry
Container registry
Model registry
Operate
Terraform modules
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Lorenzo Ferrillo
wine
Commits
bb9e068b
Commit
bb9e068b
authored
3 years ago
by
Alexandre Julliard
Browse files
Options
Downloads
Patches
Plain Diff
ntdll: Copy atan() implementation from msvcrt.
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
c7454eef
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
dlls/ntdll/math.c
+106
-2
106 additions, 2 deletions
dlls/ntdll/math.c
with
106 additions
and
2 deletions
dlls/ntdll/math.c
+
106
−
2
View file @
bb9e068b
...
...
@@ -16,6 +16,23 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*
*
* For functions copied from musl libc (http://musl.libc.org/):
* ====================================================
* Copyright 2005-2020 Rich Felker, et al.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
* ====================================================
*/
#include
<math.h>
...
...
@@ -24,6 +41,15 @@
#define WIN32_NO_STATUS
#include
"ntdll_misc.h"
/* Copied from musl: src/internal/libm.h */
static
inline
float
fp_barrierf
(
float
x
)
{
volatile
float
y
=
x
;
return
y
;
}
/*********************************************************************
* abs (NTDLL.@)
*/
...
...
@@ -34,10 +60,88 @@ int CDECL abs( int i )
/*********************************************************************
* atan (NTDLL.@)
*
* Copied from musl: src/math/atan.c
*/
double
CDECL
atan
(
double
d
)
double
CDECL
atan
(
double
x
)
{
return
unix_funcs
->
atan
(
d
);
static
const
double
atanhi
[]
=
{
4.63647609000806093515e-01
,
7.85398163397448278999e-01
,
9.82793723247329054082e-01
,
1.57079632679489655800e+00
,
};
static
const
double
atanlo
[]
=
{
2.26987774529616870924e-17
,
3.06161699786838301793e-17
,
1.39033110312309984516e-17
,
6.12323399573676603587e-17
,
};
static
const
double
aT
[]
=
{
3.33333333333329318027e-01
,
-
1.99999999998764832476e-01
,
1.42857142725034663711e-01
,
-
1.11111104054623557880e-01
,
9.09088713343650656196e-02
,
-
7.69187620504482999495e-02
,
6.66107313738753120669e-02
,
-
5.83357013379057348645e-02
,
4.97687799461593236017e-02
,
-
3.65315727442169155270e-02
,
1.62858201153657823623e-02
,
};
double
w
,
s1
,
s2
,
z
;
unsigned
int
ix
,
sign
;
int
id
;
ix
=
*
(
ULONGLONG
*
)
&
x
>>
32
;
sign
=
ix
>>
31
;
ix
&=
0x7fffffff
;
if
(
ix
>=
0x44100000
)
{
/* if |x| >= 2^66 */
if
(
isnan
(
x
))
return
x
;
z
=
atanhi
[
3
]
+
7.5231638452626401e-37
;
return
sign
?
-
z
:
z
;
}
if
(
ix
<
0x3fdc0000
)
{
/* |x| < 0.4375 */
if
(
ix
<
0x3e400000
)
{
/* |x| < 2^-27 */
if
(
ix
<
0x00100000
)
/* raise underflow for subnormal x */
fp_barrierf
((
float
)
x
);
return
x
;
}
id
=
-
1
;
}
else
{
x
=
fabs
(
x
);
if
(
ix
<
0x3ff30000
)
{
/* |x| < 1.1875 */
if
(
ix
<
0x3fe60000
)
{
/* 7/16 <= |x| < 11/16 */
id
=
0
;
x
=
(
2
.
0
*
x
-
1
.
0
)
/
(
2
.
0
+
x
);
}
else
{
/* 11/16 <= |x| < 19/16 */
id
=
1
;
x
=
(
x
-
1
.
0
)
/
(
x
+
1
.
0
);
}
}
else
{
if
(
ix
<
0x40038000
)
{
/* |x| < 2.4375 */
id
=
2
;
x
=
(
x
-
1
.
5
)
/
(
1
.
0
+
1
.
5
*
x
);
}
else
{
/* 2.4375 <= |x| < 2^66 */
id
=
3
;
x
=
-
1
.
0
/
x
;
}
}
}
/* end of argument reduction */
z
=
x
*
x
;
w
=
z
*
z
;
/* break sum from i=0 to 10 aT[i]z**(i+1) into odd and even poly */
s1
=
z
*
(
aT
[
0
]
+
w
*
(
aT
[
2
]
+
w
*
(
aT
[
4
]
+
w
*
(
aT
[
6
]
+
w
*
(
aT
[
8
]
+
w
*
aT
[
10
])))));
s2
=
w
*
(
aT
[
1
]
+
w
*
(
aT
[
3
]
+
w
*
(
aT
[
5
]
+
w
*
(
aT
[
7
]
+
w
*
aT
[
9
]))));
if
(
id
<
0
)
return
x
-
x
*
(
s1
+
s2
);
z
=
atanhi
[
id
]
-
(
x
*
(
s1
+
s2
)
-
atanlo
[
id
]
-
x
);
return
sign
?
-
z
:
z
;
}
/*********************************************************************
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment