mirror of
https://github.com/apache/nuttx.git
synced 2026-05-27 19:36:35 +08:00
Support for printing NaN and infinity from Andrew Tridgell
This commit is contained in:
@@ -44,6 +44,8 @@
|
|||||||
* Included Files
|
* Included Files
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
#include "lib_internal.h"
|
#include "lib_internal.h"
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
@@ -84,6 +86,10 @@
|
|||||||
* Private Variables
|
* Private Variables
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Private Functions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: zeroes
|
* 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
|
* 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 dsgn; /* Unused sign indicator */
|
||||||
int i;
|
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 */
|
/* Non-zero... positive or negative */
|
||||||
|
|
||||||
if (value < 0)
|
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');
|
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.
|
* 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--)
|
for (i = expt; i > 0; i--)
|
||||||
{
|
{
|
||||||
if (*digits != '\0')
|
if (*digits != '\0')
|
||||||
{
|
{
|
||||||
obj->put(obj, *digits);
|
obj->put(obj, *digits);
|
||||||
digits++;
|
digits++;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user