msvcrt: Fix bugs in math.c

Zheng Chen chanchengcc at gmail.com
Sun Mar 22 11:08:21 CDT 2015


Hi Piotr,

2015-03-22 23:45 GMT+08:00 Piotr Caban <piotr.caban at gmail.com>:

> On 03/22/15 15:02, Kevin Chan wrote:
>
>>
>> Linux and Windows treats NAN differently and I am not quite sure which I
>> should follow here, so I just leave it for now...
>>
> The goal is to make _copysign behave as on windows. The signbit function
> is not available in Visual Studio.
>
>
Understood. Thank you :)


>     It would be nice to also change signbit definition on systems that
>>     doesn't support it, so it at least works for normal numbers.
>>
>> The signbit() function is actually part of C99, not my implementation,
>> so I think it should be supported on most systems? Though I am not quite
>> sure...
>>
> It's not available when compiled with Visual Studio. There's following
> code in math.c:
>     #ifndef signbit
>     #define signbit(x) 0
>     #endif
> I think it would be better if it's at least changed to something like:
> #define signbit(x) ((x)<0 ? 1 : 0)
> It will not work correctly for -NAN or -0 but it will not break the cases
> where old implementation was working.
>

Sorry I didn't notice my program in VS was linked to the C++ lib for this
signbit() function.
"#define signbit(x) ((x)<0 ? 1 : 0)"  Looks good to me, I will submit a
patch. Thanks for the advice :)


> Maybe we could rewrite this three-line code to "(signbit(sign) &&
>> signbit(num)) ? num : -num"? It seems more efficient, but it also seems
>> the code become not very easy-to-read...
>>
> I would stick with more readable code.
>

Great! Me, too.

Thanks,
Zheng
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20150323/14aac129/attachment.html>


More information about the wine-devel mailing list