[pedretti@roguewave.com] libc/2072: sscanf fails to correctly parse certain floating point numbers

Andreas Jaeger aj@suse.de
Wed Feb 7 00:04:00 GMT 2001


We received the appended bug report.  First analysis shows that
strtold is broken.  The output of the program is:

ldval = 3.000000, ret = 1
ldval = 0.000000, ret = 1
ldval = 0.000000, errno: Success

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define _GNU_SOURCE 1
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>

int
main (void)
{
  long double ldval = 0;
  int ret;
  
  ret = sscanf("30000000000000000000.00e-19", "%Lf", &ldval);
  printf("ldval = %Lf, ret = %d\n", ldval, ret);

  ret = sscanf("300000000000000000000.00e-20", "%Lf", &ldval);
  printf("ldval = %Lf, ret = %d\n", ldval, ret);

  errno = 0;
  ldval = strtold ("300000000000000000000.00e-20", NULL);
  printf("ldval = %Lf, errno: %m\n", ldval);
  
  return 0;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Any ideas?

Andreas



More information about the Libc-alpha mailing list