This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Bug in Cygwin strtod()


Hello Corinna,

The current strtod patchlet doesn't look the posted patch. For instance
in newlib 1.20, strtod.c:339 I see

if (nd + i < 10)

while in my patch it was

if (nd + 1 < 10)

I don't know if this is because my patch was not correctly applied, or
if this is the result of a subsequent conflict, but it's no surprised
that current code is wrong with regard to what I've tested.

For now on sh4, I can't notice the problem (but I use my version of the
patch). Do you know if this is reproducible only on Cygwin ? It is
easier for me to check on Linux. I'll try to reproduce on any target and
give a status.

Regards,

Christian

On 12/19/2012 11:16 AM, Corinna Vinschen wrote:
> Here's an error report w/ replies on the Cygwin list:
> 
> On Dec 19 08:03, marco atzeri wrote:
>> On 12/19/2012 2:30 AM, KHMan wrote:
>>> On 12/19/2012 8:54 AM, Cary R. wrote:
>>>> The following code demonstrates a subtle bug in the Cygwin version of
>>>> strtod(). The value it generates is slightly different than the value
>>>> when using the math header files. This used to work correctly some
>>>> time ago (months). I just took the time to track the problem down in
>>>> our regression suite.
>>>>
>>>> #include<math.h>
>>>> #include<stdio.h>
>>>> #include<stdlib.h>
>>>>
>>>> int main()
>>>> {
>>>>     double value = M_LN10;
>>>>
>>>>     printf("generate const. - value: %0.15f.\n", value);
>>>>     printf("expected const. - value: 2.302585092994046.\n");
>>>>
>>>>     printf("\n");
>>>>     value = strtod("2.30258509299404568402", 0);
>>>>
>>>>     /* Note: the last digit is incorrect. */
>>>>     printf("generate strtod - value: %0.15f.\n", value);
>>>>     printf("expected strtod - value: 2.302585092994046.\n");
>>>>
>>>>     return 0;
>>>> }
>>>
>>> Yep, looks like the significand misses its mark by 1.
>>>
>>
>> strtod is from newlib.
>> the last change in the code is one year and half ago
>>
>> http://sourceware.org/cgi-bin/cvsweb.cgi/src/newlib/libc/stdlib/strtod.c.diff?r1=1.17&r2=1.18&cvsroot=src
> 
> In fact, the aforementioned change is the culprit of the wrong
> result.  The discussion about the patch starts here:
> http://sourceware.org/ml/newlib/2011/msg00178.html
> 
> For now I have reverted the patch.  It might have fixed some problem,
> but it introduced a new one, so it was apparently not correct, and I
> was not able to reproduce the described problem in the first place.
> 
> 
> Corinna
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]