msvcrt: Fix bugs in math.c
陈正
chanchengcc at gmail.com
Sun Mar 22 06:28:25 CDT 2015
- Fixed the problem of atan(INF)/tanh(INF)/exp(INF) causing errno EDOM
- Fixed the error of _copysign(1., -0.) returning 1
These patch fixes parts of these two bugs: 37149, 37150
---
dlls/msvcrt/math.c | 23 ++++++++++++-----------
1 file changed, 12 insertions(+), 11 deletions(-)
diff --git a/dlls/msvcrt/math.c b/dlls/msvcrt/math.c
index acac35d..155de47 100644
--- a/dlls/msvcrt/math.c
+++ b/dlls/msvcrt/math.c
@@ -88,10 +88,12 @@ float CDECL MSVCRT__chgsignf( float num )
*/
float CDECL MSVCRT__copysignf( float num, float sign )
{
- /* FIXME: Behaviour for Nan/Inf? */
- if (sign < 0.0)
- return num < 0.0 ? num : -num;
- return num < 0.0 ? -num : num;
+ /* FIXME: Behaviour for signbit(NAN) is different in Linux and
+ * Windows, where Windows gives a zero for -NAN
+ */
+ if (signbit(sign))
+ return signbit(num) ? num : -num;
+ return signbit(num) ? -num : num;
}
/*********************************************************************
@@ -363,7 +365,6 @@ double CDECL MSVCRT_asin( double x )
*/
double CDECL MSVCRT_atan( double x )
{
- if (!isfinite(x)) *MSVCRT__errno() = MSVCRT_EDOM;
return atan(x);
}
@@ -399,7 +400,6 @@ double CDECL MSVCRT_cosh( double x )
*/
double CDECL MSVCRT_exp( double x )
{
- if (!isfinite(x)) *MSVCRT__errno() = MSVCRT_EDOM;
return exp(x);
}
@@ -484,7 +484,6 @@ double CDECL MSVCRT_tan( double x )
*/
double CDECL MSVCRT_tanh( double x )
{
- if (!isfinite(x)) *MSVCRT__errno() = MSVCRT_EDOM;
return tanh(x);
}
@@ -1227,10 +1226,12 @@ int CDECL _controlfp_s(unsigned int *cur, unsigned
int newval, unsigned int mask
*/
double CDECL MSVCRT__copysign(double num, double sign)
{
- /* FIXME: Behaviour for Nan/Inf? */
- if (sign < 0.0)
- return num < 0.0 ? num : -num;
- return num < 0.0 ? -num : num;
+ /* FIXME: Behaviour for signbit(NAN) is different in Linux and
+ * Windows, where Windows gives a zero for -NAN
+ */
+ if (signbit(sign))
+ return signbit(num) ? num : -num;
+ return signbit(num) ? -num : num;
}
/*********************************************************************
--
2.3.3
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-patches/attachments/20150322/1cff330a/attachment.html>
More information about the wine-patches
mailing list