msvcrt: fix _copysign(1., -0.) error
Kevin Chan
chanchengcc at gmail.com
Sun Mar 22 08:51:13 CDT 2015
- Fixed the error of _copysign(1., -0.) returning 1
This patch fixes parts of these two bugs: 37149, 37150
---
dlls/msvcrt/math.c | 20 ++++++++++++--------
1 file changed, 12 insertions(+), 8 deletions(-)
diff --git a/dlls/msvcrt/math.c b/dlls/msvcrt/math.c
index 19989c9..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;
}
/*********************************************************************
@@ -1224,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/99f168b4/attachment.html>
More information about the wine-patches
mailing list