nand32(), nand64(), nand128() — Return quiet NaN

Standards

Standards / Extensions C or C++ Dependencies
C/C++ DFP both z/OS® V1.8

Format

#define __STDC_WANT_DEC_FP__
#include <math.h>

_Decimal32  nand32(const char *tagp); 
_Decimal64  nand64(const char *tagp); 
_Decimal128 nand128(const char *tagp);
   

General description

In the nan() family of functions, the call nand32("n-char-sequence") is equivalent to strtod32("NAN(n-charsequence)", (char**) NULL) and the call nand32("") is equivalent to strtod32("NAN()", (char**) NULL). If tagp does not point to an n-char sequence or an empty string, the call is equivalent to strtod32("NAN", (char**) NULL). Calls to nand64() and nand128() are equivalent to the corresponding calls strtod64() and strtod128().
Notes:
  1. To use IEEE decimal floating-point, the hardware must have the Decimal Floating-Point Facility installed.
  2. These functions work in IEEE decimal floating-point format. See "IEEE Decimal Floating-Point" for more information.

Returned value

If successful, they return a quiet NaN with content indicated by tagp.

Example

⁄* CELEBN05

   This program illustrates the use of the nand32() function.

   It calls both nand32() and strtod32() with equivalent arguments
   and displays output of both. Output should be identical.

*⁄

#define  __STDC_WANT_DEC_FP__
#include <math.h>
#include <stdio.h>
#include <stdlib.h>          ⁄* needed for strtod32()                *⁄


#define TESTVALS 5

struct
{
  const char * str;
}
nan_vals[] =
{
 ⁄*0*⁄  { "0"            },
 ⁄*1*⁄  { "1"            },
 ⁄*2*⁄  { "something"    },   ⁄* invalid n-char seq.                 *⁄
 ⁄*3*⁄  { "999999"       },   ⁄* max nancode                         *⁄
 ⁄*4*⁄  { "1000000"      }    ⁄* max nancode + 1                     *⁄
}
,
strod_vals[] =
{
 ⁄*0*⁄  { "NAN(0)"       },
 ⁄*1*⁄  { "NAN(1)"       },
 ⁄*2*⁄  { "NAN"          },
 ⁄*3*⁄  { "NAN(999999)"  },
 ⁄*4*⁄  { "NAN(1000000)" }
};


int main(void)
{
  _Decimal32 outnan,
             outstrtod;
  int        i;

  printf("Illustrates the nand32() function\n");
  printf("Output for both nand32() and strtod32()"
         "should be identical.\n\n");

  for (i = 0; i < TESTVALS; i++)
  {
    outnan    =   nand32(  nan_vals[i].str      );
    outstrtod = strtod32(strod_vals[i].str, NULL);

    printf("nand32(%s)        returned = %Hg\n"
          ,   nan_vals[i].str, outnan   );
    printf("strtod32(%s) returned = %Hg\n\n"
          , strod_vals[i].str, outstrtod);
  }

  return 0;
}

Related information