decimal 2.1.0

Decimal floating point arithmetic for Rust
Documentation
/* ------------------------------------------------------------------ */
/* decDouble.c -- decDouble operations module                         */
/* ------------------------------------------------------------------ */
/* Copyright (c) IBM Corporation, 2000, 2010.  All rights reserved.   */
/*                                                                    */
/* This software is made available under the terms of the             */
/* ICU License -- ICU 1.8.1 and later.                                */
/*                                                                    */
/* The description and User's Guide ("The decNumber C Library") for   */
/* this software is included in the package as decNumber.pdf.  This   */
/* document is also available in HTML, together with specifications,  */
/* testcases, and Web links, on the General Decimal Arithmetic page.  */
/*                                                                    */
/* Please send comments, suggestions, and corrections to the author:  */
/*   mfc@uk.ibm.com                                                   */
/*   Mike Cowlishaw, IBM Fellow                                       */
/*   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         */
/* ------------------------------------------------------------------ */
/* This module comprises decDouble operations (including conversions) */
/* ------------------------------------------------------------------ */

#include "decContext.h"       // public includes

#include "decDouble.h"        // ..


/* Constant mappings for shared code */
#define DECPMAX     DECDOUBLE_Pmax

#define DECEMIN     DECDOUBLE_Emin

#define DECEMAX     DECDOUBLE_Emax

#define DECEMAXD    DECDOUBLE_EmaxD

#define DECBYTES    DECDOUBLE_Bytes

#define DECSTRING   DECDOUBLE_String

#define DECECONL    DECDOUBLE_EconL

#define DECBIAS     DECDOUBLE_Bias

#define DECLETS     DECDOUBLE_Declets

#define DECQTINY    (-DECDOUBLE_Bias)

// parameters of next-wider format
#define DECWBYTES   DECQUAD_Bytes

#define DECWPMAX    DECQUAD_Pmax

#define DECWECONL   DECQUAD_EconL

#define DECWBIAS    DECQUAD_Bias


/* Type and function mappings for shared code */
#define decFloat                   decDouble      // Type name

#define decFloatWider              decQuad        // Type name


// Utilities and conversions (binary results, extractors, etc.)
#define decFloatFromBCD            decDoubleFromBCD

#define decFloatFromInt32          decDoubleFromInt32

#define decFloatFromPacked         decDoubleFromPacked

#define decFloatFromPackedChecked  decDoubleFromPackedChecked

#define decFloatFromString         decDoubleFromString

#define decFloatFromUInt32         decDoubleFromUInt32

#define decFloatFromWider          decDoubleFromWider

#define decFloatGetCoefficient     decDoubleGetCoefficient

#define decFloatGetExponent        decDoubleGetExponent

#define decFloatSetCoefficient     decDoubleSetCoefficient

#define decFloatSetExponent        decDoubleSetExponent

#define decFloatShow               decDoubleShow

#define decFloatToBCD              decDoubleToBCD

#define decFloatToEngString        decDoubleToEngString

#define decFloatToInt32            decDoubleToInt32

#define decFloatToInt32Exact       decDoubleToInt32Exact

#define decFloatToPacked           decDoubleToPacked

#define decFloatToString           decDoubleToString

#define decFloatToUInt32           decDoubleToUInt32

#define decFloatToUInt32Exact      decDoubleToUInt32Exact

#define decFloatToWider            decDoubleToWider

#define decFloatZero               decDoubleZero


// Computational (result is a decFloat)
#define decFloatAbs                decDoubleAbs

#define decFloatAdd                decDoubleAdd

#define decFloatAnd                decDoubleAnd

#define decFloatDivide             decDoubleDivide

#define decFloatDivideInteger      decDoubleDivideInteger

#define decFloatFMA                decDoubleFMA

#define decFloatInvert             decDoubleInvert

#define decFloatLogB               decDoubleLogB

#define decFloatMax                decDoubleMax

#define decFloatMaxMag             decDoubleMaxMag

#define decFloatMin                decDoubleMin

#define decFloatMinMag             decDoubleMinMag

#define decFloatMinus              decDoubleMinus

#define decFloatMultiply           decDoubleMultiply

#define decFloatNextMinus          decDoubleNextMinus

#define decFloatNextPlus           decDoubleNextPlus

#define decFloatNextToward         decDoubleNextToward

#define decFloatOr                 decDoubleOr

#define decFloatPlus               decDoublePlus

#define decFloatQuantize           decDoubleQuantize

#define decFloatReduce             decDoubleReduce

#define decFloatRemainder          decDoubleRemainder

#define decFloatRemainderNear      decDoubleRemainderNear

#define decFloatRotate             decDoubleRotate

#define decFloatScaleB             decDoubleScaleB

#define decFloatShift              decDoubleShift

#define decFloatSubtract           decDoubleSubtract

#define decFloatToIntegralValue    decDoubleToIntegralValue

#define decFloatToIntegralExact    decDoubleToIntegralExact

#define decFloatXor                decDoubleXor


// Comparisons
#define decFloatCompare            decDoubleCompare

#define decFloatCompareSignal      decDoubleCompareSignal

#define decFloatCompareTotal       decDoubleCompareTotal

#define decFloatCompareTotalMag    decDoubleCompareTotalMag


// Copies
#define decFloatCanonical          decDoubleCanonical

#define decFloatCopy               decDoubleCopy

#define decFloatCopyAbs            decDoubleCopyAbs

#define decFloatCopyNegate         decDoubleCopyNegate

#define decFloatCopySign           decDoubleCopySign


// Non-computational
#define decFloatClass              decDoubleClass

#define decFloatClassString        decDoubleClassString

#define decFloatDigits             decDoubleDigits

#define decFloatIsCanonical        decDoubleIsCanonical

#define decFloatIsFinite           decDoubleIsFinite

#define decFloatIsInfinite         decDoubleIsInfinite

#define decFloatIsInteger          decDoubleIsInteger

#define decFloatIsLogical          decDoubleIsLogical

#define decFloatIsNaN              decDoubleIsNaN

#define decFloatIsNegative         decDoubleIsNegative

#define decFloatIsNormal           decDoubleIsNormal

#define decFloatIsPositive         decDoubleIsPositive

#define decFloatIsSignaling        decDoubleIsSignaling

#define decFloatIsSignalling       decDoubleIsSignalling

#define decFloatIsSigned           decDoubleIsSigned

#define decFloatIsSubnormal        decDoubleIsSubnormal

#define decFloatIsZero             decDoubleIsZero

#define decFloatRadix              decDoubleRadix

#define decFloatSameQuantum        decDoubleSameQuantum

#define decFloatVersion            decDoubleVersion


#include "decNumberLocal.h"   // local includes (need DECPMAX)

#include "decCommon.c"        // non-arithmetic decFloat routines

#include "decBasic.c"         // basic formats routines