Browse Source

libdtoa: fixed handling of NaN and Infinity

otherwise we print thousands of 00000 characters
sbg
Andrew Tridgell 12 years ago
parent
commit
b06098a540
  1. 23
      nuttx/libc/stdio/lib_libdtoa.c

23
nuttx/libc/stdio/lib_libdtoa.c

@ -43,6 +43,7 @@
/**************************************************************************** /****************************************************************************
* Included Files * Included Files
****************************************************************************/ ****************************************************************************/
#include <math.h>
/**************************************************************************** /****************************************************************************
* Pre-processor Definitions * Pre-processor Definitions
@ -104,6 +105,13 @@ static void zeroes(FAR struct lib_outstream_s *obj, int nzeroes)
* Private Functions * Private Functions
****************************************************************************/ ****************************************************************************/
static void lib_dtoa_string(FAR struct lib_outstream_s *obj, const char *str)
{
while (*str) {
obj->put(obj, *str++);
}
}
/**************************************************************************** /****************************************************************************
* Name: lib_dtoa * Name: lib_dtoa
* *
@ -138,8 +146,21 @@ static void lib_dtoa(FAR struct lib_outstream_s *obj, int fmt, int prec,
int dsgn; /* Unused sign indicator */ int dsgn; /* Unused sign indicator */
int i; int i;
/* Non-zero... positive or negative */ /* special handling for NaN and Infinity */
if (isnan(value)) {
lib_dtoa_string(obj, "NaN");
return;
}
if (isinf(value)) {
if (value < 0.0d) {
obj->put(obj, '-');
}
lib_dtoa_string(obj, "Infinity");
return;
}
/* Non-zero... positive or negative */
if (value < 0) if (value < 0)
{ {
value = -value; value = -value;

Loading…
Cancel
Save