Support for printing NaN and infinity from Andrew Tridgell
This commit is contained in:
parent
504b25ee2b
commit
06871729dd
@ -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++;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user