Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
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-winehq
Commits
5eaa4c56
Commit
5eaa4c56
authored
Aug 06, 2020
by
Piotr Caban
Committed by
Alexandre Julliard
Aug 06, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
msvcrt: Import atan2f from musl.
Signed-off-by:
Piotr Caban
<
piotr@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
2cb6a178
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
65 additions
and
4 deletions
+65
-4
math.c
dlls/msvcrt/math.c
+65
-4
No files found.
dlls/msvcrt/math.c
View file @
5eaa4c56
...
...
@@ -340,12 +340,73 @@ float CDECL MSVCRT_atanf( float x )
/*********************************************************************
* MSVCRT_atan2f (MSVCRT.@)
*
* Copied from musl: src/math/atan2f.c
*/
float
CDECL
MSVCRT_atan2f
(
float
x
,
float
y
)
float
CDECL
MSVCRT_atan2f
(
float
y
,
float
x
)
{
float
ret
=
atan2f
(
x
,
y
);
if
(
isnan
(
x
))
return
math_error
(
_DOMAIN
,
"atan2f"
,
x
,
y
,
ret
);
return
ret
;
static
const
float
pi
=
3.1415927410e+00
,
pi_lo
=
-
8.7422776573e-08
;
float
z
;
unsigned
int
m
,
ix
,
iy
;
if
(
MSVCRT__isnanf
(
x
)
||
MSVCRT__isnanf
(
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(-,-) */
}
}
/*********************************************************************
...
...
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