Skip to content
Snippets Groups Projects
Commit 06871729 authored by Gregory Nutt's avatar Gregory Nutt
Browse files

Support for printing NaN and infinity from Andrew Tridgell

parent 504b25ee
Branches
Tags
No related merge requests found
......@@ -44,6 +44,8 @@
* Included Files
****************************************************************************/
#include <math.h>
#include "lib_internal.h"
/****************************************************************************
......@@ -84,6 +86,10 @@
* Private Variables
****************************************************************************/
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
* Name: zeroes
*
......@@ -103,9 +109,21 @@ static void zeroes(FAR struct lib_outstream_s *obj, int nzeroes)
}
/****************************************************************************
* Private Functions
* Name: lib_dtoa_string
*
* Description:
* Print the specified string
*
****************************************************************************/
static void lib_dtoa_string(FAR struct lib_outstream_s *obj, const char *str)
{
while (*str)
{
obj->put(obj, *str++);
}
}
/****************************************************************************
* Name: lib_dtoa
*
......@@ -140,6 +158,25 @@ static void lib_dtoa(FAR struct lib_outstream_s *obj, int fmt, int prec,
int dsgn; /* Unused sign indicator */
int i;
/* 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)
......@@ -173,7 +210,7 @@ static void lib_dtoa(FAR struct lib_outstream_s *obj, int fmt, int prec,
obj->put(obj, '0');
/* A decimal point is printed only in the alternate form or if a
/* A decimal point is printed only in the alternate form or if a
* particular precision is requested.
*/
......@@ -227,7 +264,7 @@ static void lib_dtoa(FAR struct lib_outstream_s *obj, int fmt, int prec,
for (i = expt; i > 0; i--)
{
if (*digits != '\0')
{
{
obj->put(obj, *digits);
digits++;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment