Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
6148bf50
Commit
6148bf50
authored
Apr 04, 2023
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
msvcrt: Use the atan2()/atan2f() implementation from the bundled musl library.
parent
03bdd6d5
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
0 additions
and
144 deletions
+0
-144
math.c
dlls/msvcrt/math.c
+0
-144
No files found.
dlls/msvcrt/math.c
View file @
6148bf50
...
...
@@ -797,77 +797,6 @@ float CDECL atanf( float x )
return
sign
?
-
z
:
z
;
}
/*********************************************************************
* atan2f (MSVCRT.@)
*
* Copied from musl: src/math/atan2f.c
*/
float
CDECL
atan2f
(
float
y
,
float
x
)
{
static
const
float
pi
=
3.1415927410e+00
,
pi_lo
=
-
8.7422776573e-08
;
float
z
;
unsigned
int
m
,
ix
,
iy
;
if
(
isnan
(
x
)
||
isnan
(
y
))
return
x
+
y
;
ix
=
*
(
unsigned
int
*
)
&
x
;
iy
=
*
(
unsigned
int
*
)
&
y
;
if
(
ix
==
0x3f800000
)
/* x=1.0 */
return
atanf
(
y
);
m
=
((
iy
>>
31
)
&
1
)
|
((
ix
>>
30
)
&
2
);
/* 2*sign(x)+sign(y) */
ix
&=
0x7fffffff
;
iy
&=
0x7fffffff
;
/* when y = 0 */
if
(
iy
==
0
)
{
switch
(
m
)
{
case
0
:
case
1
:
return
y
;
/* atan(+-0,+anything)=+-0 */
case
2
:
return
pi
;
/* atan(+0,-anything) = pi */
case
3
:
return
-
pi
;
/* atan(-0,-anything) =-pi */
}
}
/* when x = 0 */
if
(
ix
==
0
)
return
m
&
1
?
-
pi
/
2
:
pi
/
2
;
/* when x is INF */
if
(
ix
==
0x7f800000
)
{
if
(
iy
==
0x7f800000
)
{
switch
(
m
)
{
case
0
:
return
pi
/
4
;
/* atan(+INF,+INF) */
case
1
:
return
-
pi
/
4
;
/* atan(-INF,+INF) */
case
2
:
return
3
*
pi
/
4
;
/*atan(+INF,-INF)*/
case
3
:
return
-
3
*
pi
/
4
;
/*atan(-INF,-INF)*/
}
}
else
{
switch
(
m
)
{
case
0
:
return
0
.
0
f
;
/* atan(+...,+INF) */
case
1
:
return
-
0
.
0
f
;
/* atan(-...,+INF) */
case
2
:
return
pi
;
/* atan(+...,-INF) */
case
3
:
return
-
pi
;
/* atan(-...,-INF) */
}
}
}
/* |y/x| > 0x1p26 */
if
(
ix
+
(
26
<<
23
)
<
iy
||
iy
==
0x7f800000
)
return
m
&
1
?
-
pi
/
2
:
pi
/
2
;
/* z = atan(|y/x|) with correct underflow */
if
((
m
&
2
)
&&
iy
+
(
26
<<
23
)
<
ix
)
/*|y/x| < 0x1p-26, x < 0 */
z
=
0
.
0
;
else
z
=
atanf
(
fabsf
(
y
/
x
));
switch
(
m
)
{
case
0
:
return
z
;
/* atan(+,+) */
case
1
:
return
-
z
;
/* atan(-,+) */
case
2
:
return
pi
-
(
z
-
pi_lo
);
/* atan(+,-) */
default:
/* case 3 */
return
(
z
-
pi_lo
)
-
pi
;
/* atan(-,-) */
}
}
/* Copied from musl: src/math/__rem_pio2f.c */
static
int
__rem_pio2f
(
float
x
,
double
*
y
)
{
...
...
@@ -1822,79 +1751,6 @@ double CDECL atan( double x )
return
sign
?
-
z
:
z
;
}
/*********************************************************************
* atan2 (MSVCRT.@)
*
* Copied from musl: src/math/atan2.c
*/
double
CDECL
atan2
(
double
y
,
double
x
)
{
static
const
double
pi
=
3.1415926535897931160E+00
,
pi_lo
=
1.2246467991473531772E-16
;
double
z
;
unsigned
int
m
,
lx
,
ly
,
ix
,
iy
;
if
(
isnan
(
x
)
||
isnan
(
y
))
return
x
+
y
;
ix
=
*
(
ULONGLONG
*
)
&
x
>>
32
;
lx
=
*
(
ULONGLONG
*
)
&
x
;
iy
=
*
(
ULONGLONG
*
)
&
y
>>
32
;
ly
=
*
(
ULONGLONG
*
)
&
y
;
if
(((
ix
-
0x3ff00000
)
|
lx
)
==
0
)
/* x = 1.0 */
return
atan
(
y
);
m
=
((
iy
>>
31
)
&
1
)
|
((
ix
>>
30
)
&
2
);
/* 2*sign(x)+sign(y) */
ix
=
ix
&
0x7fffffff
;
iy
=
iy
&
0x7fffffff
;
/* when y = 0 */
if
((
iy
|
ly
)
==
0
)
{
switch
(
m
)
{
case
0
:
case
1
:
return
y
;
/* atan(+-0,+anything)=+-0 */
case
2
:
return
pi
;
/* atan(+0,-anything) = pi */
case
3
:
return
-
pi
;
/* atan(-0,-anything) =-pi */
}
}
/* when x = 0 */
if
((
ix
|
lx
)
==
0
)
return
m
&
1
?
-
pi
/
2
:
pi
/
2
;
/* when x is INF */
if
(
ix
==
0x7ff00000
)
{
if
(
iy
==
0x7ff00000
)
{
switch
(
m
)
{
case
0
:
return
pi
/
4
;
/* atan(+INF,+INF) */
case
1
:
return
-
pi
/
4
;
/* atan(-INF,+INF) */
case
2
:
return
3
*
pi
/
4
;
/* atan(+INF,-INF) */
case
3
:
return
-
3
*
pi
/
4
;
/* atan(-INF,-INF) */
}
}
else
{
switch
(
m
)
{
case
0
:
return
0
.
0
;
/* atan(+...,+INF) */
case
1
:
return
-
0
.
0
;
/* atan(-...,+INF) */
case
2
:
return
pi
;
/* atan(+...,-INF) */
case
3
:
return
-
pi
;
/* atan(-...,-INF) */
}
}
}
/* |y/x| > 0x1p64 */
if
(
ix
+
(
64
<<
20
)
<
iy
||
iy
==
0x7ff00000
)
return
m
&
1
?
-
pi
/
2
:
pi
/
2
;
/* z = atan(|y/x|) without spurious underflow */
if
((
m
&
2
)
&&
iy
+
(
64
<<
20
)
<
ix
)
/* |y/x| < 0x1p-64, x<0 */
z
=
0
;
else
z
=
atan
(
fabs
(
y
/
x
));
switch
(
m
)
{
case
0
:
return
z
;
/* atan(+,+) */
case
1
:
return
-
z
;
/* atan(-,+) */
case
2
:
return
pi
-
(
z
-
pi_lo
);
/* atan(+,-) */
default
:
/* case 3 */
return
(
z
-
pi_lo
)
-
pi
;
/* atan(-,-) */
}
}
/* Copied from musl: src/math/rint.c */
static
double
__rint
(
double
x
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment