HP aC++/HP C A.06.25 Release Notes

Table Of Contents
To use strtod32, strtod64, or strtod128, include <strtodec.h>. (These
interfaces are not declared in <stdlib.h>, as specified in the ISO/IEC C draft
Technical Report.)
Also see the “HP-UX floating-point guide for HP Integrity servers” at http://
www.hp.com/go/fp.
Decimal Floating-Point Example
/***********************************************************************
*
* This program is intended to illustrate how C decimal FP might be
* used in a commercial billing program.
*
* The program reads input data from a file, interprets each datum
* as a number of service minutes, converts to hours (rounding up to
* the nearest tenth of an hour), and multiplies by a billing rate
* (rounding to the nearest cent with halfway cases rounding away
* from zero). For each inputl, the program writes the billing amount
* as an ASCII character string to a file. Along the way, it
* accumulates sums of service minutes, hours billed, and amounts
* billed, and at the end writes the total sums to stdout.
*
* Program constants determine the input and output filenames and
* whether the input is ASCII, BID ("binary" encoding for decimal FP),
* or DPD ("decimal" encoding for decimal FP). The HP-UX
* implementation uses BID encoding for its decimal FP types.
*
**********************************************************************/
const char * ifilename = "biller.in"; // input file
const char * ofilename = "biller.out"; // output file
const enum { ascii, bid, dpd } encoding = ascii; // input encoding
const _Decimal64 rate = 149.95DD; // hourly billing rate
#define __STDC_WANT_DEC_FP__
#include <stdio.h>
#include <std.lib.h>
#include <math.h>
#include <fenv.h>
#include <strtodec.h>
#include <assert.h>
#pragma STDC FENV_ACCESS ON
int main() {
unsigned int n; // number of inputs
_Decimal64 m; // number of minutes
_Decimal64 h; // number of hours
_Decimal64 b; // amount billed
_Decimal64 sumM, sumH, sumB; // sums
const _Decimal64 onert = 0.0DD; // for rounding to tenths
const _Decimal64 twort = 0.00DD; // for rounding to hundredths
FILE *inp=NULL; // input stream
FILE *outp=NULL; // output stream
22 What’s New in This Version