Bug in Cygwin strtod()
Wed Dec 19 19:52:00 GMT 2012
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.
> >>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
In fact, the aforementioned change is the culprit of the wrong
result. The discussion about the patch starts here:
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 Vinschen Please, send mails regarding Cygwin to
Cygwin Project Co-Leader cygwin AT cygwin DOT com
More information about the Newlib