msvcrt: Fix _copysign bugs for NAN/INF.
This commit is contained in:
parent
b61d93a6b7
commit
829e893184
|
@ -46,8 +46,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* FIXME: Does not work with -NAN and -0. */
|
||||||
#ifndef signbit
|
#ifndef signbit
|
||||||
#define signbit(x) 0
|
#define signbit(x) ((x) < 0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef int (CDECL *MSVCRT_matherr_func)(struct MSVCRT__exception *);
|
typedef int (CDECL *MSVCRT_matherr_func)(struct MSVCRT__exception *);
|
||||||
|
@ -88,10 +89,9 @@ float CDECL MSVCRT__chgsignf( float num )
|
||||||
*/
|
*/
|
||||||
float CDECL MSVCRT__copysignf( float num, float sign )
|
float CDECL MSVCRT__copysignf( float num, float sign )
|
||||||
{
|
{
|
||||||
/* FIXME: Behaviour for Nan/Inf? */
|
if (signbit(sign))
|
||||||
if (sign < 0.0)
|
return signbit(num) ? num : -num;
|
||||||
return num < 0.0 ? num : -num;
|
return signbit(num) ? -num : num;
|
||||||
return num < 0.0 ? -num : num;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
|
@ -1227,10 +1227,9 @@ int CDECL _controlfp_s(unsigned int *cur, unsigned int newval, unsigned int mask
|
||||||
*/
|
*/
|
||||||
double CDECL MSVCRT__copysign(double num, double sign)
|
double CDECL MSVCRT__copysign(double num, double sign)
|
||||||
{
|
{
|
||||||
/* FIXME: Behaviour for Nan/Inf? */
|
if (signbit(sign))
|
||||||
if (sign < 0.0)
|
return signbit(num) ? num : -num;
|
||||||
return num < 0.0 ? num : -num;
|
return signbit(num) ? -num : num;
|
||||||
return num < 0.0 ? -num : num;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
|
|
Loading…
Reference in New Issue