9#ifndef INCLUDED_BDLDFP_DECIMALIMPUTIL
10#define INCLUDED_BDLDFP_DECIMALIMPUTIL
171#include <bdlscm_version.h>
186#include <bsl_algorithm.h>
187#include <bsl_cmath.h>
188#include <bsl_c_errno.h>
189#include <bsl_iostream.h>
191#ifndef BDE_DONT_ALLOW_TRANSITIVE_INCLUDES
192#include <bsl_c_signal.h>
195#ifdef BDLDFP_DECIMALPLATFORM_SOFTWARE
200#define BDLDFP_DECIMALIMPUTIL_DF(lit) \
201 BloombergLP::bdldfp::DecimalImpUtil::parse32( \
202 (BloombergLP::bdldfp::DecimalImpUtil::checkLiteral(lit), #lit))
204#define BDLDFP_DECIMALIMPUTIL_DD(lit) \
205 BloombergLP::bdldfp::DecimalImpUtil::parse64( \
206 (BloombergLP::bdldfp::DecimalImpUtil::checkLiteral(lit), #lit))
208#define BDLDFP_DECIMALIMPUTIL_DL(lit) \
209 BloombergLP::bdldfp::DecimalImpUtil::parse128( \
210 (BloombergLP::bdldfp::DecimalImpUtil::checkLiteral(lit), #lit))
212#elif defined(BDLDFP_DECIMALPLATFORM_C99_TR) || defined( __IBM_DFP__ )
214#define BDLDFP_DECIMALIMPUTIL_JOIN_(a,b) a##b
218#define BDLDFP_DECIMALIMPUTIL_DF(lit) BDLDFP_DECIMALIMPUTIL_JOIN_(lit,df)
220#define BDLDFP_DECIMALIMPUTIL_DD(lit) BDLDFP_DECIMALIMPUTIL_JOIN_(lit,dd)
222#define BDLDFP_DECIMALIMPUTIL_DL(lit) BDLDFP_DECIMALIMPUTIL_JOIN_(lit,dl)
241#if defined(BDLDFP_DECIMALPLATFORM_INTELDFP)
242 typedef DecimalImpUtil_IntelDfp Imp;
244 BDLDFP_DECIMALPLATFORM_COMPILER_ERROR;
283#ifdef BDLDFP_DECIMALPLATFORM_SOFTWARE
291 struct This_is_not_a_floating_point_literal {};
297 template <
class TYPE>
298 static void checkLiteral(
const TYPE& t);
302 static void checkLiteral(
double);
304#elif defined(BDLDFP_DECIMALPLATFORM_HARDWARE)
308#error Improperly configured decimal floating point platform settings
436 unsigned int *significand,
1515#ifdef BDLDFP_DECIMALPLATFORM_SOFTWARE
1517template <
class TYPE>
1519void DecimalImpUtil::checkLiteral(
const TYPE& t)
1521 (void)
static_cast<This_is_not_a_floating_point_literal
>(t);
1525void DecimalImpUtil::checkLiteral(
double)
1538 return Imp::int32ToDecimal32(value);
1544 return Imp::int32ToDecimal64(value);
1550 return Imp::int32ToDecimal128(value);
1558 return Imp::uint32ToDecimal32(value);
1565 return Imp::uint32ToDecimal64(value);
1572 return Imp::uint32ToDecimal128(value);
1580 return Imp::int64ToDecimal32(value);
1587 return Imp::int64ToDecimal64(value);
1594 return Imp::int64ToDecimal128(value);
1602 return Imp::uint64ToDecimal32(value);
1609 return Imp::uint64ToDecimal64(value);
1616 return Imp::uint64ToDecimal128(value);
1628 return Imp::add(lhs, rhs);
1636 return Imp::add(lhs, rhs);
1643 return Imp::add(lhs, rhs);
1653 return Imp::subtract(lhs, rhs);
1661 return Imp::subtract(lhs, rhs);
1669 return Imp::subtract(lhs, rhs);
1679 return Imp::multiply(lhs, rhs);
1687 return Imp::multiply(lhs, rhs);
1695 return Imp::multiply(lhs, rhs);
1707 return Imp::divide(lhs, rhs);
1715 return Imp::divide(lhs, rhs);
1723 return Imp::divide(lhs, rhs);
1731 _IDEC_flags flags(0);
1732 retval.d_raw = __bid32_quantize(value.d_raw,
1743 _IDEC_flags flags(0);
1744 retval.d_raw = __bid64_quantize(value.d_raw,
1755 _IDEC_flags flags(0);
1756 retval.d_raw = __bid128_quantize(value.d_raw,
1773 _IDEC_flags flags(0);
1774 retval.d_raw = __bid32_quantize(value.d_raw, exp.d_raw, &flags);
1789 _IDEC_flags flags(0);
1790 retval.d_raw = __bid64_quantize(value.d_raw, exp.d_raw, &flags);
1805 _IDEC_flags flags(0);
1806 retval.d_raw = __bid128_quantize(value.d_raw, exp.d_raw, &flags);
1821 _IDEC_flags flags(0);
1822 retval.d_raw = __bid32_quantize(y.d_raw, exp.d_raw, &flags);
1840 _IDEC_flags flags(0);
1841 retval.d_raw = __bid64_quantize(y.d_raw, exp.d_raw, &flags);
1860 _IDEC_flags flags(0);
1861 retval.d_raw = __bid128_quantize(y.d_raw, exp.d_raw, &flags);
1872 return __bid32_sameQuantum(x.d_raw, y.d_raw);
1878 return __bid64_sameQuantum(x.d_raw, y.d_raw);
1884 return __bid128_sameQuantum(x.d_raw, y.d_raw);
1893 _IDEC_flags flags(0);
1894 long int ret = __bid32_lrint(x.d_raw, &flags);
1895 if (BID_INVALID_EXCEPTION & flags) {
1904 _IDEC_flags flags(0);
1905 long int ret = __bid64_lrint(x.d_raw, &flags);
1906 if (BID_INVALID_EXCEPTION & flags) {
1915 _IDEC_flags flags(0);
1916 long int ret = __bid128_lrint(x.d_raw, &flags);
1917 if (BID_INVALID_EXCEPTION & flags) {
1926 _IDEC_flags flags(0);
1927 long long int ret = __bid32_llrint(x.d_raw, &flags);
1928 if (BID_INVALID_EXCEPTION & flags) {
1937 _IDEC_flags flags(0);
1938 long long int ret = __bid64_llrint(x.d_raw, &flags);
1939 if (BID_INVALID_EXCEPTION & flags) {
1948 _IDEC_flags flags(0);
1949 long long int ret = __bid128_llrint(x.d_raw, &flags);
1950 if (BID_INVALID_EXCEPTION & flags) {
1961 _IDEC_flags flags(0);
1962 retval.d_raw = __bid32_nextafter(x.d_raw, y.d_raw, &flags);
1963 if (BID_OVERFLOW_EXCEPTION & flags ||
1964 BID_UNDERFLOW_EXCEPTION & flags)
1968 if (BID_INVALID_EXCEPTION & flags) {
1979 _IDEC_flags flags(0);
1980 retval.d_raw = __bid64_nextafter(x.d_raw, y.d_raw, &flags);
1981 if (BID_OVERFLOW_EXCEPTION & flags ||
1982 BID_UNDERFLOW_EXCEPTION & flags)
1986 if (BID_INVALID_EXCEPTION & flags) {
1997 _IDEC_flags flags(0);
1998 retval.d_raw = __bid128_nextafter(x.d_raw, y.d_raw, &flags);
1999 if (BID_OVERFLOW_EXCEPTION & flags ||
2000 BID_UNDERFLOW_EXCEPTION & flags)
2004 if (BID_INVALID_EXCEPTION & flags) {
2015 _IDEC_flags flags(0);
2016 retval.d_raw = __bid32_nexttoward(x.d_raw, y.d_raw, &flags);
2017 if (BID_OVERFLOW_EXCEPTION & flags ||
2018 BID_UNDERFLOW_EXCEPTION & flags)
2022 if (BID_INVALID_EXCEPTION & flags) {
2033 _IDEC_flags flags(0);
2034 retval.d_raw = __bid64_nexttoward(x.d_raw, y.d_raw, &flags);
2035 if (BID_OVERFLOW_EXCEPTION & flags ||
2036 BID_UNDERFLOW_EXCEPTION & flags)
2040 if (BID_INVALID_EXCEPTION & flags) {
2051 _IDEC_flags flags(0);
2052 retval.d_raw = __bid128_nexttoward(x.d_raw, y.d_raw, &flags);
2053 if (BID_OVERFLOW_EXCEPTION & flags ||
2054 BID_UNDERFLOW_EXCEPTION & flags)
2058 if (BID_INVALID_EXCEPTION & flags) {
2069 _IDEC_flags flags(0);
2070 retval.d_raw = __bid32_pow(base.d_raw, exp.d_raw, &flags);
2071 if (BID_OVERFLOW_EXCEPTION & flags ||
2072 BID_UNDERFLOW_EXCEPTION & flags ||
2073 BID_ZERO_DIVIDE_EXCEPTION & flags)
2077 if (BID_INVALID_EXCEPTION & flags) {
2088 _IDEC_flags flags(0);
2089 retval.d_raw = __bid64_pow(base.d_raw, exp.d_raw, &flags);
2090 if (BID_OVERFLOW_EXCEPTION & flags ||
2091 BID_UNDERFLOW_EXCEPTION & flags ||
2092 BID_ZERO_DIVIDE_EXCEPTION & flags)
2096 if (BID_INVALID_EXCEPTION & flags) {
2108 _IDEC_flags flags(0);
2109 retval.d_raw = __bid128_pow(base.d_raw, exp.d_raw, &flags);
2110 if (BID_OVERFLOW_EXCEPTION & flags ||
2111 BID_UNDERFLOW_EXCEPTION & flags ||
2112 BID_ZERO_DIVIDE_EXCEPTION & flags)
2116 if (BID_INVALID_EXCEPTION & flags) {
2126 _IDEC_flags flags(0);
2127 retval.d_raw = __bid32_round_integral_positive(x.d_raw, &flags);
2128 if (BID_INVALID_EXCEPTION & flags) {
2138 _IDEC_flags flags(0);
2139 retval.d_raw = __bid64_round_integral_positive(x.d_raw, &flags);
2140 if (BID_INVALID_EXCEPTION & flags) {
2150 _IDEC_flags flags(0);
2151 retval.d_raw = __bid128_round_integral_positive(x.d_raw, &flags);
2152 if (BID_INVALID_EXCEPTION & flags) {
2163 _IDEC_flags flags(0);
2164 retval.d_raw = __bid32_round_integral_negative(x.d_raw, &flags);
2165 if (BID_INVALID_EXCEPTION & flags) {
2175 _IDEC_flags flags(0);
2176 retval.d_raw = __bid64_round_integral_negative(x.d_raw, &flags);
2177 if (BID_INVALID_EXCEPTION & flags) {
2187 _IDEC_flags flags(0);
2188 retval.d_raw = __bid128_round_integral_negative(x.d_raw, &flags);
2189 if (BID_INVALID_EXCEPTION & flags) {
2199 _IDEC_flags flags(0);
2200 retval.d_raw = __bid32_round_integral_nearest_away(x.d_raw, &flags);
2201 if (BID_INVALID_EXCEPTION & flags) {
2211 _IDEC_flags flags(0);
2212 retval.d_raw = __bid64_round_integral_nearest_away(x.d_raw, &flags);
2213 if (BID_INVALID_EXCEPTION & flags) {
2223 _IDEC_flags flags(0);
2224 retval.d_raw = __bid128_round_integral_nearest_away(x.d_raw, &flags);
2225 if (BID_INVALID_EXCEPTION & flags) {
2234 _IDEC_flags flags(0);
2235 long int rv = __bid32_lround(x.d_raw, &flags);
2236 if (BID_INVALID_EXCEPTION & flags) {
2245 _IDEC_flags flags(0);
2246 long int rv = __bid64_lround(x.d_raw, &flags);
2247 if (BID_INVALID_EXCEPTION & flags) {
2256 _IDEC_flags flags(0);
2257 long int rv = __bid128_lround(x.d_raw, &flags);
2258 if (BID_INVALID_EXCEPTION & flags) {
2268 _IDEC_flags flags(0);
2269 retval.d_raw = __bid32_round_integral_zero(x.d_raw, &flags);
2270 if (BID_INVALID_EXCEPTION & flags) {
2280 _IDEC_flags flags(0);
2281 retval.d_raw = __bid64_round_integral_zero(x.d_raw, &flags);
2282 if (BID_INVALID_EXCEPTION & flags) {
2292 _IDEC_flags flags(0);
2293 retval.d_raw = __bid128_round_integral_zero(x.d_raw, &flags);
2294 if (BID_INVALID_EXCEPTION & flags) {
2305 _IDEC_flags flags(0);
2306 rv.d_raw = __bid32_fma(x.d_raw, y.d_raw, z.d_raw, &flags);
2307 if (BID_INVALID_EXCEPTION & flags) {
2317 _IDEC_flags flags(0);
2318 rv.d_raw = __bid64_fma(x.d_raw, y.d_raw, z.d_raw, &flags);
2319 if (BID_INVALID_EXCEPTION & flags) {
2329 _IDEC_flags flags(0);
2330 rv.d_raw = __bid128_fma(x.d_raw, y.d_raw, z.d_raw, &flags);
2331 if (BID_INVALID_EXCEPTION & flags) {
2342 rv.d_raw = __bid32_abs(value.d_raw);
2350 rv.d_raw = __bid64_abs(value.d_raw);
2358 rv.d_raw = __bid128_abs(value.d_raw);
2366 _IDEC_flags flags(0);
2367 rv.d_raw = __bid32_sqrt(value.d_raw, &flags);
2368 if (BID_INVALID_EXCEPTION & flags) {
2378 _IDEC_flags flags(0);
2379 rv.d_raw = __bid64_sqrt(value.d_raw, &flags);
2380 if (BID_INVALID_EXCEPTION & flags) {
2390 _IDEC_flags flags(0);
2391 rv.d_raw = __bid128_sqrt(value.d_raw, &flags);
2392 if (BID_INVALID_EXCEPTION & flags) {
2403 rv.d_raw = __bid32_copySign(x.d_raw, y.d_raw);
2412 rv.d_raw = __bid64_copySign(x.d_raw, y.d_raw);
2421 rv.d_raw = __bid128_copySign(x.d_raw, y.d_raw);
2429 _IDEC_flags flags(0);
2430 rv.d_raw = __bid32_exp(value.d_raw, &flags);
2431 if (BID_INVALID_EXCEPTION & flags) {
2434 if (BID_OVERFLOW_EXCEPTION & flags) {
2444 _IDEC_flags flags(0);
2445 rv.d_raw = __bid64_exp(value.d_raw, &flags);
2446 if (BID_INVALID_EXCEPTION & flags) {
2449 if (BID_OVERFLOW_EXCEPTION & flags) {
2459 _IDEC_flags flags(0);
2460 rv.d_raw = __bid128_exp(value.d_raw, &flags);
2461 if (BID_INVALID_EXCEPTION & flags) {
2464 if (BID_OVERFLOW_EXCEPTION & flags) {
2474 _IDEC_flags flags(0);
2475 rv.d_raw = __bid32_log(value.d_raw, &flags);
2476 if (BID_INVALID_EXCEPTION & flags) {
2479 if (BID_ZERO_DIVIDE_EXCEPTION & flags) {
2489 _IDEC_flags flags(0);
2490 rv.d_raw = __bid64_log(value.d_raw, &flags);
2491 if (BID_INVALID_EXCEPTION & flags) {
2494 if (BID_ZERO_DIVIDE_EXCEPTION & flags) {
2504 _IDEC_flags flags(0);
2505 rv.d_raw = __bid128_log(value.d_raw, &flags);
2506 if (BID_INVALID_EXCEPTION & flags) {
2509 if (BID_ZERO_DIVIDE_EXCEPTION & flags) {
2519 _IDEC_flags flags(0);
2520 rv.d_raw = __bid32_logb(value.d_raw, &flags);
2521 if (BID_INVALID_EXCEPTION & flags) {
2524 if (BID_ZERO_DIVIDE_EXCEPTION & flags) {
2534 _IDEC_flags flags(0);
2535 rv.d_raw = __bid64_logb(value.d_raw, &flags);
2536 if (BID_INVALID_EXCEPTION & flags) {
2539 if (BID_ZERO_DIVIDE_EXCEPTION & flags) {
2549 _IDEC_flags flags(0);
2550 rv.d_raw = __bid128_logb(value.d_raw, &flags);
2551 if (BID_INVALID_EXCEPTION & flags) {
2554 if (BID_ZERO_DIVIDE_EXCEPTION & flags) {
2564 _IDEC_flags flags(0);
2565 rv.d_raw = __bid32_log10(value.d_raw, &flags);
2566 if (BID_INVALID_EXCEPTION & flags) {
2569 if (BID_ZERO_DIVIDE_EXCEPTION & flags) {
2579 _IDEC_flags flags(0);
2580 rv.d_raw = __bid64_log10(value.d_raw, &flags);
2581 if (BID_INVALID_EXCEPTION & flags) {
2584 if (BID_ZERO_DIVIDE_EXCEPTION & flags) {
2594 _IDEC_flags flags(0);
2595 rv.d_raw = __bid128_log10(value.d_raw, &flags);
2596 if (BID_INVALID_EXCEPTION & flags) {
2599 if (BID_ZERO_DIVIDE_EXCEPTION & flags) {
2610 _IDEC_flags flags(0);
2611 rv.d_raw = __bid32_fmod(x.d_raw, y.d_raw, &flags);
2612 if (BID_INVALID_EXCEPTION & flags) {
2623 _IDEC_flags flags(0);
2624 rv.d_raw = __bid64_fmod(x.d_raw, y.d_raw, &flags);
2625 if (BID_INVALID_EXCEPTION & flags) {
2636 _IDEC_flags flags(0);
2637 rv.d_raw = __bid128_fmod(x.d_raw, y.d_raw, &flags);
2638 if (BID_INVALID_EXCEPTION & flags) {
2649 _IDEC_flags flags(0);
2650 rv.d_raw = __bid32_rem(x.d_raw, y.d_raw, &flags);
2651 if (BID_INVALID_EXCEPTION & flags) {
2662 _IDEC_flags flags(0);
2663 rv.d_raw = __bid64_rem(x.d_raw, y.d_raw, &flags);
2664 if (BID_INVALID_EXCEPTION & flags) {
2675 _IDEC_flags flags(0);
2676 rv.d_raw = __bid128_rem(x.d_raw, y.d_raw, &flags);
2677 if (BID_INVALID_EXCEPTION & flags) {
2689 return Imp::negate(value);
2696 return Imp::negate(value);
2703 return Imp::negate(value);
2715 return Imp::less(lhs, rhs);
2723 return Imp::less(lhs, rhs);
2731 return Imp::less(lhs, rhs);
2741 return Imp::greater(lhs, rhs);
2749 return Imp::greater(lhs, rhs);
2757 return Imp::greater(lhs, rhs);
2767 return Imp::lessEqual(lhs, rhs);
2775 return Imp::lessEqual(lhs, rhs);
2783 return Imp::lessEqual(lhs, rhs);
2793 return Imp::greaterEqual(lhs, rhs);
2801 return Imp::greaterEqual(lhs, rhs);
2809 return Imp::greaterEqual(lhs, rhs);
2819 return Imp::equal(lhs, rhs);
2827 return Imp::equal(lhs, rhs);
2835 return Imp::equal(lhs, rhs);
2845 return Imp::notEqual(lhs, rhs);
2853 return Imp::notEqual(lhs, rhs);
2861 return Imp::notEqual(lhs, rhs);
2870 return Imp::convertToDecimal32(input);
2877 return Imp::convertToDecimal32(input);
2884 return Imp::convertToDecimal64(input);
2891 return Imp::convertToDecimal64(input);
2898 return Imp::convertToDecimal128(input);
2905 return Imp::convertToDecimal128(input);
2914 return Imp::binaryToDecimal32(value);
2921 return Imp::binaryToDecimal32(value);
2928 return Imp::binaryToDecimal64(value);
2935 return Imp::binaryToDecimal64(value);
2942 return Imp::binaryToDecimal128(value);
2949 return Imp::binaryToDecimal128(value);
2960 BSLS_ASSERT(bsl::max(significand, -significand) <= 9999999);
2961 return Imp::makeDecimalRaw32(significand, exponent);
2973 return Imp::makeDecimalRaw64(significand, exponent);
2982 BSLS_ASSERT(std::max(significand, -significand) <= 9999999999999999LL);
2984 return Imp::makeDecimalRaw64(significand, exponent);
2994 return Imp::makeDecimalRaw64(significand, exponent);
3003 return Imp::makeDecimalRaw64(significand, exponent);
3014 return Imp::makeDecimalRaw128(significand, exponent);
3024 return Imp::makeDecimalRaw128(significand, exponent);
3034 return Imp::makeDecimalRaw128(significand, exponent);
3044 return Imp::makeDecimalRaw128(significand, exponent);
3054 _IDEC_flags flags(0);
3055 result.d_raw = __bid32_scalbn(value.d_raw, exponent, &flags);
3056 if (BID_INVALID_EXCEPTION & flags) {
3059 if (BID_OVERFLOW_EXCEPTION & flags) {
3070 _IDEC_flags flags(0);
3071 result.d_raw = __bid64_scalbn(value.d_raw, exponent, &flags);
3072 if (BID_INVALID_EXCEPTION & flags) {
3075 if (BID_OVERFLOW_EXCEPTION & flags) {
3086 _IDEC_flags flags(0);
3087 result.d_raw = __bid128_scalbn(value.d_raw, exponent, &flags);
3088 if (BID_INVALID_EXCEPTION & flags) {
3091 if (BID_OVERFLOW_EXCEPTION & flags) {
3102 return Imp::parse32(input);
3109 return Imp::parse64(input);
3116 return Imp::parse128(input);
3124 return Imp::parse32(input, status);
3132 return Imp::parse64(input, status);
3140 return Imp::parse128(input, status);
3148 return Imp::convertDPDtoBID(dpd);
3155 return Imp::convertDPDtoBID(dpd);
3162 return Imp::convertDPDtoBID(dpd);
3169 return Imp::convertBIDtoDPD(value);
3176 return Imp::convertBIDtoDPD(value);
3183 return Imp::convertBIDtoDPD(value);
3191 return Imp::convertFromBID(bid);
3198 return Imp::convertFromBID(bid);
3205 return Imp::convertFromBID(bid);
3212 return Imp::convertToBID(value);
3219 return Imp::convertToBID(value);
3226 return Imp::convertToBID(value);
Definition bdldfp_decimalimputil.h:238
static ValueType32 min32() BSLS_KEYWORD_NOEXCEPT
static ValueType32 remainder(ValueType32 x, ValueType32 y)
Definition bdldfp_decimalimputil.h:2645
static ValueType32 trunc(ValueType32 x)
Definition bdldfp_decimalimputil.h:2265
static ValueType64 makeDecimal64(long long int significand, int exponent)
static ValueType32 log(ValueType32 x)
Definition bdldfp_decimalimputil.h:2471
static ValueType128 roundError128() BSLS_KEYWORD_NOEXCEPT
static ValueType128 int32ToDecimal128(int value)
Definition bdldfp_decimalimputil.h:1548
static ValueType64 convertToDecimal64(const ValueType32 &input)
Definition bdldfp_decimalimputil.h:2882
static ValueType128 denormMin128() BSLS_KEYWORD_NOEXCEPT
static ValueType32 normalize(ValueType32 original)
static bool lessEqual(ValueType32 lhs, ValueType32 rhs)
Definition bdldfp_decimalimputil.h:2764
static ValueType128 makeDecimalRaw128(unsigned long long int significand, int exponent)
static ValueType32 fma(ValueType32 x, ValueType32 y, ValueType32 z)
Definition bdldfp_decimalimputil.h:2302
static ValueType64 max64() BSLS_KEYWORD_NOEXCEPT
static ValueType128 convertToDecimal128(const ValueType32 &input)
Definition bdldfp_decimalimputil.h:2896
static ValueType32 scaleB(ValueType32 value, int exponent)
Definition bdldfp_decimalimputil.h:3051
static ValueType32 signalingNaN32() BSLS_KEYWORD_NOEXCEPT
static ValueType64 epsilon64() BSLS_KEYWORD_NOEXCEPT
static ValueType32 pow(ValueType32 base, ValueType32 exp)
Definition bdldfp_decimalimputil.h:2066
static ValueType64 roundError64() BSLS_KEYWORD_NOEXCEPT
static ValueType64 parse64(const char *input)
Definition bdldfp_decimalimputil.h:3107
static ValueType128 max128() BSLS_KEYWORD_NOEXCEPT
static ValueType32 binaryToDecimal32(float value)
Definition bdldfp_decimalimputil.h:2912
static int format(char *buffer, int length, ValueType64 value, const DecimalFormatConfig &cfg)
static int decompose(int *sign, Uint128 *significand, int *exponent, ValueType128 value)
static long long int llrint(ValueType32 x)
Definition bdldfp_decimalimputil.h:1924
static ValueType64 infinity64() BSLS_KEYWORD_NOEXCEPT
static ValueType128 infinity128() BSLS_KEYWORD_NOEXCEPT
static ValueType32 parse32(const char *input)
Definition bdldfp_decimalimputil.h:3100
static bool notEqual(ValueType32 lhs, ValueType32 rhs)
Definition bdldfp_decimalimputil.h:2842
static ValueType32 floor(ValueType32 x)
Definition bdldfp_decimalimputil.h:2160
static ValueType32 copySign(ValueType32 x, ValueType32 y)
Definition bdldfp_decimalimputil.h:2399
static ValueType32 convertDPDtoBID(DecimalStorage::Type32 dpd)
Definition bdldfp_decimalimputil.h:3146
static bool less(ValueType32 lhs, ValueType32 rhs)
Definition bdldfp_decimalimputil.h:2712
Imp::ValueType64 ValueType64
Definition bdldfp_decimalimputil.h:250
static ValueType32 round(ValueType32 x)
Definition bdldfp_decimalimputil.h:2196
static ValueType32 uint32ToDecimal32(unsigned int value)
Definition bdldfp_decimalimputil.h:1556
static bool greater(ValueType32 lhs, ValueType32 rhs)
Definition bdldfp_decimalimputil.h:2738
static ValueType32 fabs(ValueType32 x)
Definition bdldfp_decimalimputil.h:2339
static ValueType32 fmod(ValueType32 x, ValueType32 y)
Definition bdldfp_decimalimputil.h:2606
static ValueType32 log10(ValueType32 x)
Definition bdldfp_decimalimputil.h:2561
static ValueType64 makeDecimalRaw64(long long int significand, int exponent)
static ValueType32 multiply(ValueType32 lhs, ValueType32 rhs)
Definition bdldfp_decimalimputil.h:1676
static ValueType32 convertFromBID(DecimalStorage::Type32 bid)
Definition bdldfp_decimalimputil.h:3189
static ValueType32 divide(ValueType32 lhs, ValueType32 rhs)
Definition bdldfp_decimalimputil.h:1704
static int decompose(int *sign, bsls::Types::Uint64 *significand, int *exponent, ValueType64 value)
static ValueType64 min64() BSLS_KEYWORD_NOEXCEPT
static ValueType32 epsilon32() BSLS_KEYWORD_NOEXCEPT
static ValueType32 roundError32() BSLS_KEYWORD_NOEXCEPT
static int decompose(int *sign, unsigned int *significand, int *exponent, ValueType32 value)
static ValueType64 normalize(ValueType64 original)
Imp::ValueType128 ValueType128
Definition bdldfp_decimalimputil.h:251
static ValueType32 makeDecimalRaw32(int significand, int exponent)
Definition bdldfp_decimalimputil.h:2956
static ValueType32 logB(ValueType32 x)
Definition bdldfp_decimalimputil.h:2516
static DecimalStorage::Type32 convertToBID(ValueType32 value)
Definition bdldfp_decimalimputil.h:3210
static int format(char *buffer, int length, ValueType32 value, const DecimalFormatConfig &cfg)
static ValueType64 makeDecimal64(int significand, int exponent)
static long int lround(ValueType32 x)
Definition bdldfp_decimalimputil.h:2232
static ValueType32 convertToDecimal32(const ValueType64 &input)
Definition bdldfp_decimalimputil.h:2868
static ValueType128 parse128(const char *input)
Definition bdldfp_decimalimputil.h:3114
static ValueType128 epsilon128() BSLS_KEYWORD_NOEXCEPT
static ValueType64 int64ToDecimal64(long long int value)
Definition bdldfp_decimalimputil.h:1585
static ValueType32 denormMin32() BSLS_KEYWORD_NOEXCEPT
static ValueType64 binaryToDecimal64(float value)
Definition bdldfp_decimalimputil.h:2926
static ValueType32 quantize(ValueType32 value, ValueType32 exponent)
Definition bdldfp_decimalimputil.h:1727
static int classify(ValueType64 x)
static ValueType32 subtract(ValueType32 lhs, ValueType32 rhs)
Definition bdldfp_decimalimputil.h:1650
static ValueType128 uint32ToDecimal128(unsigned int value)
Definition bdldfp_decimalimputil.h:1570
static ValueType64 quietNaN64() BSLS_KEYWORD_NOEXCEPT
static ValueType32 sqrt(ValueType32 x)
Definition bdldfp_decimalimputil.h:2363
static ValueType64 round(ValueType64 x, unsigned int precision)
static int quantizeEqual(ValueType32 *x, ValueType32 y, int exponent)
Definition bdldfp_decimalimputil.h:1811
static ValueType128 quietNaN128() BSLS_KEYWORD_NOEXCEPT
static ValueType128 signalingNaN128() BSLS_KEYWORD_NOEXCEPT
@ k_STATUS_UNDERFLOW
Definition bdldfp_decimalimputil.h:257
@ k_STATUS_INEXACT
Definition bdldfp_decimalimputil.h:256
@ k_STATUS_OVERFLOW
Definition bdldfp_decimalimputil.h:258
static bool equal(ValueType32 lhs, ValueType32 rhs)
Definition bdldfp_decimalimputil.h:2816
static ValueType32 uint64ToDecimal32(unsigned long long int value)
Definition bdldfp_decimalimputil.h:1600
static ValueType64 makeDecimalRaw64(unsigned long long int significand, int exponent)
static int classify(ValueType32 x)
static ValueType128 binaryToDecimal128(float value)
Definition bdldfp_decimalimputil.h:2940
static ValueType64 uint32ToDecimal64(unsigned int value)
Definition bdldfp_decimalimputil.h:1563
static ValueType128 round(ValueType128 x, unsigned int precision)
static ValueType32 round(ValueType32 x, unsigned int precision)
static ValueType32 nexttoward(ValueType32 from, ValueType128 to)
Definition bdldfp_decimalimputil.h:2012
static int classify(ValueType128 x)
static ValueType32 quietNaN32() BSLS_KEYWORD_NOEXCEPT
static ValueType64 makeInfinity64(bool isNegative=false)
static ValueType32 int64ToDecimal32(long long int value)
Definition bdldfp_decimalimputil.h:1578
static ValueType32 nextafter(ValueType32 from, ValueType32 to)
Definition bdldfp_decimalimputil.h:1958
static ValueType32 exp(ValueType32 x)
Definition bdldfp_decimalimputil.h:2426
static ValueType64 int32ToDecimal64(int value)
Definition bdldfp_decimalimputil.h:1542
static ValueType128 normalize(ValueType128 original)
static ValueType32 negate(ValueType32 value)
Definition bdldfp_decimalimputil.h:2687
static ValueType128 makeDecimalRaw128(long long int significand, int exponent)
static ValueType64 makeDecimal64(unsigned int significand, int exponent)
static bool greaterEqual(ValueType32 lhs, ValueType32 rhs)
Definition bdldfp_decimalimputil.h:2790
static ValueType32 infinity32() BSLS_KEYWORD_NOEXCEPT
static ValueType32 int32ToDecimal32(int value)
Definition bdldfp_decimalimputil.h:1536
static long int lrint(ValueType32 x)
Definition bdldfp_decimalimputil.h:1891
static ValueType32 max32() BSLS_KEYWORD_NOEXCEPT
static ValueType32 add(ValueType32 lhs, ValueType32 rhs)
Definition bdldfp_decimalimputil.h:1625
static ValueType64 uint64ToDecimal64(unsigned long long int value)
Definition bdldfp_decimalimputil.h:1607
static ValueType128 min128() BSLS_KEYWORD_NOEXCEPT
static DecimalStorage::Type32 convertBIDtoDPD(ValueType32 value)
Definition bdldfp_decimalimputil.h:3167
static ValueType128 uint64ToDecimal128(unsigned long long int value)
Definition bdldfp_decimalimputil.h:1614
static int format(char *buffer, int length, ValueType128 value, const DecimalFormatConfig &cfg)
static ValueType128 int64ToDecimal128(long long int value)
Definition bdldfp_decimalimputil.h:1592
Imp::ValueType32 ValueType32
Definition bdldfp_decimalimputil.h:249
static bool sameQuantum(ValueType32 x, ValueType32 y)
Definition bdldfp_decimalimputil.h:1870
static ValueType64 denormMin64() BSLS_KEYWORD_NOEXCEPT
static ValueType32 ceil(ValueType32 x)
Definition bdldfp_decimalimputil.h:2123
static ValueType64 makeDecimal64(unsigned long long int significand, int exponent)
static ValueType64 signalingNaN64() BSLS_KEYWORD_NOEXCEPT
Definition bdldfp_uint128.h:175
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
#define BSLS_KEYWORD_NOEXCEPT
Definition bsls_keyword.h:674
Definition bdldfp_decimal.h:747
BID_UINT128 Type128
Definition bdldfp_decimalstorage.h:86
BID_UINT64 Type64
Definition bdldfp_decimalstorage.h:85
BID_UINT32 Type32
Definition bdldfp_decimalstorage.h:84
unsigned long long Uint64
Definition bsls_types.h:139