decDouble.c 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. /* ------------------------------------------------------------------ */
  2. /* decDouble.c -- decDouble operations module */
  3. /* ------------------------------------------------------------------ */
  4. /* Copyright (c) IBM Corporation, 2000, 2010. All rights reserved. */
  5. /* */
  6. /* This software is made available under the terms of the */
  7. /* ICU License -- ICU 1.8.1 and later. */
  8. /* */
  9. /* The description and User's Guide ("The decNumber C Library") for */
  10. /* this software is included in the package as decNumber.pdf. This */
  11. /* document is also available in HTML, together with specifications, */
  12. /* testcases, and Web links, on the General Decimal Arithmetic page. */
  13. /* */
  14. /* Please send comments, suggestions, and corrections to the author: */
  15. /* [email protected] */
  16. /* Mike Cowlishaw, IBM Fellow */
  17. /* IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK */
  18. /* ------------------------------------------------------------------ */
  19. /* This module comprises decDouble operations (including conversions) */
  20. /* ------------------------------------------------------------------ */
  21. #include "decContext.h" // public includes
  22. #include "decDouble.h" // ..
  23. /* Constant mappings for shared code */
  24. #define DECPMAX DECDOUBLE_Pmax
  25. #define DECEMIN DECDOUBLE_Emin
  26. #define DECEMAX DECDOUBLE_Emax
  27. #define DECEMAXD DECDOUBLE_EmaxD
  28. #define DECBYTES DECDOUBLE_Bytes
  29. #define DECSTRING DECDOUBLE_String
  30. #define DECECONL DECDOUBLE_EconL
  31. #define DECBIAS DECDOUBLE_Bias
  32. #define DECLETS DECDOUBLE_Declets
  33. #define DECQTINY (-DECDOUBLE_Bias)
  34. // parameters of next-wider format
  35. #define DECWBYTES DECQUAD_Bytes
  36. #define DECWPMAX DECQUAD_Pmax
  37. #define DECWECONL DECQUAD_EconL
  38. #define DECWBIAS DECQUAD_Bias
  39. /* Type and function mappings for shared code */
  40. #define decFloat decDouble // Type name
  41. #define decFloatWider decQuad // Type name
  42. // Utilities and conversions (binary results, extractors, etc.)
  43. #define decFloatFromBCD decDoubleFromBCD
  44. #define decFloatFromInt32 decDoubleFromInt32
  45. #define decFloatFromPacked decDoubleFromPacked
  46. #define decFloatFromPackedChecked decDoubleFromPackedChecked
  47. #define decFloatFromString decDoubleFromString
  48. #define decFloatFromUInt32 decDoubleFromUInt32
  49. #define decFloatFromWider decDoubleFromWider
  50. #define decFloatGetCoefficient decDoubleGetCoefficient
  51. #define decFloatGetExponent decDoubleGetExponent
  52. #define decFloatSetCoefficient decDoubleSetCoefficient
  53. #define decFloatSetExponent decDoubleSetExponent
  54. #define decFloatShow decDoubleShow
  55. #define decFloatToBCD decDoubleToBCD
  56. #define decFloatToEngString decDoubleToEngString
  57. #define decFloatToInt32 decDoubleToInt32
  58. #define decFloatToInt32Exact decDoubleToInt32Exact
  59. #define decFloatToPacked decDoubleToPacked
  60. #define decFloatToString decDoubleToString
  61. #define decFloatToUInt32 decDoubleToUInt32
  62. #define decFloatToUInt32Exact decDoubleToUInt32Exact
  63. #define decFloatToWider decDoubleToWider
  64. #define decFloatZero decDoubleZero
  65. // Computational (result is a decFloat)
  66. #define decFloatAbs decDoubleAbs
  67. #define decFloatAdd decDoubleAdd
  68. #define decFloatAnd decDoubleAnd
  69. #define decFloatDivide decDoubleDivide
  70. #define decFloatDivideInteger decDoubleDivideInteger
  71. #define decFloatFMA decDoubleFMA
  72. #define decFloatInvert decDoubleInvert
  73. #define decFloatLogB decDoubleLogB
  74. #define decFloatMax decDoubleMax
  75. #define decFloatMaxMag decDoubleMaxMag
  76. #define decFloatMin decDoubleMin
  77. #define decFloatMinMag decDoubleMinMag
  78. #define decFloatMinus decDoubleMinus
  79. #define decFloatMultiply decDoubleMultiply
  80. #define decFloatNextMinus decDoubleNextMinus
  81. #define decFloatNextPlus decDoubleNextPlus
  82. #define decFloatNextToward decDoubleNextToward
  83. #define decFloatOr decDoubleOr
  84. #define decFloatPlus decDoublePlus
  85. #define decFloatQuantize decDoubleQuantize
  86. #define decFloatReduce decDoubleReduce
  87. #define decFloatRemainder decDoubleRemainder
  88. #define decFloatRemainderNear decDoubleRemainderNear
  89. #define decFloatRotate decDoubleRotate
  90. #define decFloatScaleB decDoubleScaleB
  91. #define decFloatShift decDoubleShift
  92. #define decFloatSubtract decDoubleSubtract
  93. #define decFloatToIntegralValue decDoubleToIntegralValue
  94. #define decFloatToIntegralExact decDoubleToIntegralExact
  95. #define decFloatXor decDoubleXor
  96. // Comparisons
  97. #define decFloatCompare decDoubleCompare
  98. #define decFloatCompareSignal decDoubleCompareSignal
  99. #define decFloatCompareTotal decDoubleCompareTotal
  100. #define decFloatCompareTotalMag decDoubleCompareTotalMag
  101. // Copies
  102. #define decFloatCanonical decDoubleCanonical
  103. #define decFloatCopy decDoubleCopy
  104. #define decFloatCopyAbs decDoubleCopyAbs
  105. #define decFloatCopyNegate decDoubleCopyNegate
  106. #define decFloatCopySign decDoubleCopySign
  107. // Non-computational
  108. #define decFloatClass decDoubleClass
  109. #define decFloatClassString decDoubleClassString
  110. #define decFloatDigits decDoubleDigits
  111. #define decFloatIsCanonical decDoubleIsCanonical
  112. #define decFloatIsFinite decDoubleIsFinite
  113. #define decFloatIsInfinite decDoubleIsInfinite
  114. #define decFloatIsInteger decDoubleIsInteger
  115. #define decFloatIsLogical decDoubleIsLogical
  116. #define decFloatIsNaN decDoubleIsNaN
  117. #define decFloatIsNegative decDoubleIsNegative
  118. #define decFloatIsNormal decDoubleIsNormal
  119. #define decFloatIsPositive decDoubleIsPositive
  120. #define decFloatIsSignaling decDoubleIsSignaling
  121. #define decFloatIsSignalling decDoubleIsSignalling
  122. #define decFloatIsSigned decDoubleIsSigned
  123. #define decFloatIsSubnormal decDoubleIsSubnormal
  124. #define decFloatIsZero decDoubleIsZero
  125. #define decFloatRadix decDoubleRadix
  126. #define decFloatSameQuantum decDoubleSameQuantum
  127. #define decFloatVersion decDoubleVersion
  128. #include "decNumberLocal.h" // local includes (need DECPMAX)
  129. #include "decCommon.c" // non-arithmetic decFloat routines
  130. #include "decBasic.c" // basic formats routines