decimal 2.1.0

Decimal floating point arithmetic for Rust
Documentation
/* ------------------------------------------------------------------ */
/* decQuad.c -- decQuad 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 decQuad operations (including conversions)   */
/* ------------------------------------------------------------------ */


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

#define DECEMIN     DECQUAD_Emin

#define DECEMAX     DECQUAD_Emax

#define DECEMAXD    DECQUAD_EmaxD

#define DECBYTES    DECQUAD_Bytes

#define DECSTRING   DECQUAD_String

#define DECECONL    DECQUAD_EconL

#define DECBIAS     DECQUAD_Bias

#define DECLETS     DECQUAD_Declets

#define DECQTINY   (-DECQUAD_Bias)


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


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

#define decFloatFromInt32          decQuadFromInt32

#define decFloatFromPacked         decQuadFromPacked

#define decFloatFromPackedChecked  decQuadFromPackedChecked

#define decFloatFromString         decQuadFromString

#define decFloatFromUInt32         decQuadFromUInt32

#define decFloatFromWider          decQuadFromWider

#define decFloatGetCoefficient     decQuadGetCoefficient

#define decFloatGetExponent        decQuadGetExponent

#define decFloatSetCoefficient     decQuadSetCoefficient

#define decFloatSetExponent        decQuadSetExponent

#define decFloatShow               decQuadShow

#define decFloatToBCD              decQuadToBCD

#define decFloatToEngString        decQuadToEngString

#define decFloatToInt32            decQuadToInt32

#define decFloatToInt32Exact       decQuadToInt32Exact

#define decFloatToPacked           decQuadToPacked

#define decFloatToString           decQuadToString

#define decFloatToUInt32           decQuadToUInt32

#define decFloatToUInt32Exact      decQuadToUInt32Exact

#define decFloatToWider            decQuadToWider

#define decFloatZero               decQuadZero


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

#define decFloatAdd                decQuadAdd

#define decFloatAnd                decQuadAnd

#define decFloatDivide             decQuadDivide

#define decFloatDivideInteger      decQuadDivideInteger

#define decFloatFMA                decQuadFMA

#define decFloatInvert             decQuadInvert

#define decFloatLogB               decQuadLogB

#define decFloatMax                decQuadMax

#define decFloatMaxMag             decQuadMaxMag

#define decFloatMin                decQuadMin

#define decFloatMinMag             decQuadMinMag

#define decFloatMinus              decQuadMinus

#define decFloatMultiply           decQuadMultiply

#define decFloatNextMinus          decQuadNextMinus

#define decFloatNextPlus           decQuadNextPlus

#define decFloatNextToward         decQuadNextToward

#define decFloatOr                 decQuadOr

#define decFloatPlus               decQuadPlus

#define decFloatQuantize           decQuadQuantize

#define decFloatReduce             decQuadReduce

#define decFloatRemainder          decQuadRemainder

#define decFloatRemainderNear      decQuadRemainderNear

#define decFloatRotate             decQuadRotate

#define decFloatScaleB             decQuadScaleB

#define decFloatShift              decQuadShift

#define decFloatSubtract           decQuadSubtract

#define decFloatToIntegralValue    decQuadToIntegralValue

#define decFloatToIntegralExact    decQuadToIntegralExact

#define decFloatXor                decQuadXor


// Comparisons
#define decFloatCompare            decQuadCompare

#define decFloatCompareSignal      decQuadCompareSignal

#define decFloatCompareTotal       decQuadCompareTotal

#define decFloatCompareTotalMag    decQuadCompareTotalMag


// Copies
#define decFloatCanonical          decQuadCanonical

#define decFloatCopy               decQuadCopy

#define decFloatCopyAbs            decQuadCopyAbs

#define decFloatCopyNegate         decQuadCopyNegate

#define decFloatCopySign           decQuadCopySign


// Non-computational
#define decFloatClass              decQuadClass

#define decFloatClassString        decQuadClassString

#define decFloatDigits             decQuadDigits

#define decFloatIsCanonical        decQuadIsCanonical

#define decFloatIsFinite           decQuadIsFinite

#define decFloatIsInfinite         decQuadIsInfinite

#define decFloatIsInteger          decQuadIsInteger

#define decFloatIsLogical          decQuadIsLogical

#define decFloatIsNaN              decQuadIsNaN

#define decFloatIsNegative         decQuadIsNegative

#define decFloatIsNormal           decQuadIsNormal

#define decFloatIsPositive         decQuadIsPositive

#define decFloatIsSignaling        decQuadIsSignaling

#define decFloatIsSignalling       decQuadIsSignalling

#define decFloatIsSigned           decQuadIsSigned

#define decFloatIsSubnormal        decQuadIsSubnormal

#define decFloatIsZero             decQuadIsZero

#define decFloatRadix              decQuadRadix

#define decFloatSameQuantum        decQuadSameQuantum

#define decFloatVersion            decQuadVersion


/* And now the code itself */
#include "decContext.h"       // public includes

#include "decQuad.h"          // ..

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

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

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