本文整理汇总了C++中decNumberIsZero函数的典型用法代码示例。如果您正苦于以下问题:C++ decNumberIsZero函数的具体用法?C++ decNumberIsZero怎么用?C++ decNumberIsZero使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了decNumberIsZero函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: INTERNAL_FUNCTION_NAME
_RETURN_TYPE
INTERNAL_FUNCTION_NAME (DEC_TYPE x)
{
DEC_TYPE result;
decContext context;
decNumber dn_result;
decNumber dn_x;
decNumber dn_absx;
decNumber dn_logx;
decNumber dn_one;
decNumber dn_cmp;
enum rounding round;
FUNC_CONVERT_TO_DN (&x, &dn_x);
if (decNumberIsZero (&dn_x))
{
DFP_EXCEPT (FE_INVALID);
DFP_ERRNO (EDOM);
return _FBLOG0;
}
if (decNumberIsInfinite (&dn_x))
{
DFP_EXCEPT (FE_INVALID);
DFP_ERRNO (EDOM);
return decNumberIsNegative (&dn_x) ? _MIN_VALUE : _MAX_VALUE;
}
if (decNumberIsNaN (&dn_x))
{
DFP_EXCEPT (FE_INVALID);
DFP_ERRNO (EDOM);
return _FBLOGNAN;
}
decContextDefault (&context, DEFAULT_CONTEXT);
decNumberAbs (&dn_absx, &dn_x, &context);
/* For DFP, we use radix 10 instead of whatever FLT_RADIX happens to be */
decNumberLog10 (&dn_logx, &dn_absx, &context);
/* Capture the case where truncation will return the wrong result,
by rounding up if -1.0 < x < 1.0 */
round = DEC_ROUND_DOWN;
decNumberFromInt32 (&dn_one, 1);
decNumberCompare (&dn_cmp, &dn_x, &dn_one, &context);
if (-decNumberIsNegative(&dn_cmp))
{
decNumberFromInt32 (&dn_one, -1);
decNumberCompare (&dn_cmp, &dn_x, &dn_one, &context);
if (!decNumberIsNegative(&dn_cmp) && !decNumberIsZero(&dn_cmp))
round = DEC_ROUND_UP;
}
context.round = round;
decNumberToIntegralValue (&dn_result, &dn_logx, &context);
FUNC_CONVERT_FROM_DN (&dn_result, &result, &context);
/* Use _Decimal* to int casting. */
return (_RETURN_TYPE) result;
}
示例2: INTERNAL_FUNCTION_NAME
DEC_TYPE
INTERNAL_FUNCTION_NAME (DEC_TYPE x)
{
decContext context;
decNumber dn_result;
DEC_TYPE result;
decNumber dn_x;
decNumber dn_tmp;
decNumber dn_log10;
decNumber dn_one;
decNumber dn_cmp;
enum rounding round;
FUNC_CONVERT_TO_DN (&x, &dn_x);
if (decNumberIsNaN (&dn_x))
return x+x;
if (decNumberIsInfinite (&dn_x)) /* +-Inf: Inf */
return DEC_INFINITY;
if (decNumberIsZero (&dn_x)) /* Pole Error if x==0 */
{
DFP_ERRNO (ERANGE);
DFP_EXCEPT (FE_DIVBYZERO);
return -DFP_HUGE_VAL;
}
if (decNumberIsInfinite (&dn_x) && decNumberIsNegative (&dn_x))
return -x;
decContextDefault (&context, DEFAULT_CONTEXT);
decNumberAbs (&dn_tmp, &dn_x, &context);
/* For DFP, we use radix 10 instead of whatever FLT_RADIX
happens to be */
decNumberLog10 (&dn_log10, &dn_tmp, &context);
/* Capture the case where truncation will return the wrong result,
by rounding up if -1.0 < x < 1.0 */
round = DEC_ROUND_DOWN;
decNumberFromInt32 (&dn_one, 1);
decNumberCompare (&dn_cmp, &dn_x, &dn_one, &context);
if (-decNumberIsNegative(&dn_cmp))
{
decNumberFromInt32 (&dn_one, -1);
decNumberCompare (&dn_cmp, &dn_x, &dn_one, &context);
if (!decNumberIsNegative(&dn_cmp) && !decNumberIsZero(&dn_cmp))
round = DEC_ROUND_UP;
}
context.round = round;
decNumberToIntegralValue (&dn_result, &dn_log10, &context);
FUNC_CONVERT_FROM_DN (&dn_result, &result, &context);
return result;
}
示例3: __fpclassifyd64
int
__fpclassifyd64 (_Decimal64 x)
{
decNumber dn_x;
decContext context;
FUNC_CONVERT_TO_DN (&x, &dn_x);
if (decNumberIsNaN (&dn_x))
return FP_NAN;
else if (decNumberIsInfinite (&dn_x))
return FP_INFINITE;
else if (decNumberIsZero (&dn_x))
return FP_ZERO;
/* Since DFP value are not normalized, checking the exponent for
normal/subnormal is not suffice. For instance, the value 10e-96 will
result in a expoenent below the minimum, however it is still a FP_NORMAL
number due implicit normalization. TO avoid such traps the check relies
on runtime comparisons. */
decContextDefault (&context, DEC_INIT_DECIMAL64);
if (decNumberIsSubnormal (&dn_x, &context))
return FP_SUBNORMAL;
return FP_NORMAL;
}
示例4: __quantumd128
_Decimal128
__quantumd128 (_Decimal128 x)
{
decNumber dn_x;
decNumber dn_result;
decContext context;
_Decimal128 result;
FUNC_CONVERT_TO_DN (&x, &dn_x);
if (decNumberIsNaN (&dn_x) || decNumberIsZero (&dn_x))
return x;
if (decNumberIsInfinite (&dn_x))
return DEC_INFINITY;
/* The quantum of a finite number is defined as 1 x 10^exponent, so
first get input absolute value and then sets its coefficient to 1. */
decContextDefault (&context, DEFAULT_CONTEXT);
decNumberAbs (&dn_result, &dn_x, &context);
dn_result.digits = 1;
dn_result.lsu[0] = 1;
FUNC_CONVERT_FROM_DN (&dn_result, &result, &context);
return result;
}
示例5: INTERNAL_FUNCTION_NAME
DEC_TYPE
INTERNAL_FUNCTION_NAME (DEC_TYPE x)
{
decContext context;
decNumber dn_result;
DEC_TYPE result, one;
decNumber dn_x, dn_one;
one = DFP_CONSTANT(1.0);
FUNC_CONVERT_TO_DN (&one, &dn_one);
FUNC_CONVERT_TO_DN (&x, &dn_x);
if (decNumberIsNaN (&dn_x) || decNumberIsZero (&dn_x)
|| decNumberIsInfinite (&dn_x))
{
return x + x;
}
decContextDefault (&context, DEFAULT_CONTEXT);
/* using trig identity: acosh(x) = log(x+sqrt(x*x-1)) */
decNumberMultiply (&dn_result, &dn_x, &dn_x, &context);
decNumberAdd (&dn_result, &dn_result, &dn_one, &context);
decNumberSquareRoot (&dn_result, &dn_result, &context);
decNumberAdd (&dn_result, &dn_result, &dn_x, &context);
decNumberLn (&dn_result, &dn_result, &context);
FUNC_CONVERT_FROM_DN (&dn_result, &result, &context);
return result;
}
示例6: U_ASSERT
// -------------------------------------
// Appends the digit to the digit list if it's not out of scope.
// Ignores the digit, otherwise.
//
// This function is horribly inefficient to implement with decNumber because
// the digits are stored least significant first, which requires moving all
// existing digits down one to make space for the new one to be appended.
//
void
DigitList::append(char digit)
{
U_ASSERT(digit>='0' && digit<='9');
// Ignore digits which exceed the precision we can represent
// And don't fix for larger precision. Fix callers instead.
if (decNumberIsZero(fDecNumber)) {
// Zero needs to be special cased because of the difference in the way
// that the old DigitList and decNumber represent it.
// digit cout was zero for digitList, is one for decNumber
fDecNumber->lsu[0] = digit & 0x0f;
fDecNumber->digits = 1;
fDecNumber->exponent--; // To match the old digit list implementation.
} else {
int32_t nDigits = fDecNumber->digits;
if (nDigits < fContext.digits) {
int i;
for (i=nDigits; i>0; i--) {
fDecNumber->lsu[i] = fDecNumber->lsu[i-1];
}
fDecNumber->lsu[0] = digit & 0x0f;
fDecNumber->digits++;
// DigitList emulation - appending doesn't change the magnitude of existing
// digits. With decNumber's decimal being after the
// least signficant digit, we need to adjust the exponent.
fDecNumber->exponent--;
}
}
internalClear();
}
示例7: IEEE_FUNCTION_NAME
static DEC_TYPE
IEEE_FUNCTION_NAME (DEC_TYPE x)
{
decContext context;
decNumber dn_result;
DEC_TYPE result;
decNumber dn_x;
FUNC_CONVERT_TO_DN(&x, &dn_x);
if (decNumberIsNaN (&dn_x))
return x+x;
if (decNumberIsZero (&dn_x)) /* If x == 0: Pole Error */
{
DFP_EXCEPT (FE_DIVBYZERO);
return -DFP_HUGE_VAL;
}
if (decNumberIsNegative (&dn_x)) /* If x < 0,: Domain Error */
{
DFP_EXCEPT (FE_INVALID);
return DFP_NAN;
}
if (decNumberIsInfinite (&dn_x))
return x;
decContextDefault (&context, DEFAULT_CONTEXT);
decNumberLn(&dn_result, &dn_x, &context);
FUNC_CONVERT_FROM_DN(&dn_result, &result, &context);
return result;
}
示例8: int_to_dn
/* Compute a factorial.
* Currently, only for positive integer arguments. Needs to be extended
* to a full gamma function.
*/
decNumber *decNumberFactorial(decNumber *r, const decNumber *x, decContext *ctx) {
decNumber y, const_1;
int_to_dn(&const_1, 1, ctx);
decNumberCopy(&y, x);
if (!decNumberIsNegative(x) || decNumberIsZero(x)) {
decNumberCopy(r, &const_1);
for (;;) {
if (decNumberIsZero(&y))
break;
if (decNumberIsInfinite(r))
break;
decNumberMultiply(r, r, &y, ctx);
decNumberSubtract(&y, &y, &const_1, ctx);
}
}
return r;
}
示例9:
int32_t
DigitList::getCount() const {
if (decNumberIsZero(fDecNumber) && fDecNumber->exponent==0) {
// The extra test for exponent==0 is needed because parsing sometimes appends
// zero digits. It's bogus, decimalFormatter parsing needs to be cleaned up.
return 0;
} else {
return fDecNumber->digits;
}
}
示例10: IEEE_FUNCTION_NAME
static DEC_TYPE
IEEE_FUNCTION_NAME (DEC_TYPE x)
{
decContext context;
decNumber dn_result;
DEC_TYPE result, one, temp;
decNumber dn_x, dn_temp, dn_one;
/* int comp;*/
one=DFP_CONSTANT(1.0);
FUNC_CONVERT_TO_DN (&one, &dn_one);
FUNC_CONVERT_TO_DN (&x, &dn_x);
/* Handle NaN and early exit for x==0 */
if (decNumberIsNaN (&dn_x) || decNumberIsZero (&dn_x))
return x + x;
decContextDefault (&context, DEFAULT_CONTEXT);
decNumberAbs (&dn_temp, &dn_x, &context);
FUNC_CONVERT_FROM_DN (&dn_temp, &temp, &context);
if(temp==one) {
/* |x| == 1 -> Pole Error */
DFP_EXCEPT (FE_DIVBYZERO);
return decNumberIsNegative(&dn_x) ? -DFP_HUGE_VAL:DFP_HUGE_VAL;
} else if (temp>one) {
/* |x| > 1 -> Domain Error (this handles +-Inf too) */
DFP_EXCEPT (FE_INVALID);
return DFP_NAN;
}
// comp = decCompare (&dn_temp, &dn_one);
// switch (comp)
// {
// case 0: /* |x| == 1 -> Pole Error */
// DFP_EXCEPT (FE_DIVBYZERO);
// return decNumberIsNegative(&dn_x) ? -DFP_HUGE_VAL:DFP_HUGE_VAL;
// case 1: /* |x| > 1 -> Domain Error (this handles +-Inf too) */
// DFP_EXCEPT (FE_INVALID);
// return DFP_NAN;
// }
/* Using trig identity: atanh(x) = 1/2 * log((1+x)/(1-x)) */
decNumberAdd (&dn_result, &dn_one, &dn_x, &context);
decNumberSubtract (&dn_temp, &dn_one, &dn_x, &context);
decNumberDivide (&dn_result, &dn_result, &dn_temp, &context);
decNumberLn (&dn_result, &dn_result, &context);
decNumberAdd (&dn_temp, &dn_one, &dn_one, &context); /* 2 */
decNumberDivide (&dn_result, &dn_result, &dn_temp, &context);
FUNC_CONVERT_FROM_DN (&dn_result, &result, &context);
return result;
}
示例11: IEEE_FUNCTION_NAME
static DEC_TYPE
IEEE_FUNCTION_NAME (DEC_TYPE x)
{
decContext context;
decNumber dn_result;
DEC_TYPE result;
decNumber dn_x;
decNumber dn_sum;
decNumber dn_one;
DEC_TYPE one = DFP_CONSTANT(1.0);
FUNC_CONVERT_TO_DN (&x, &dn_x);
FUNC_CONVERT_TO_DN (&one, &dn_one);
/* For NaN, 0, or +Inf, just return x */
if (decNumberIsNaN (&dn_x) || decNumberIsZero (&dn_x) ||
(decNumberIsInfinite (&dn_x) && !decNumberIsNegative (&dn_x)))
return x+x;
decContextDefault(&context, DEFAULT_CONTEXT);
decNumberAdd(&dn_sum, &dn_x, &dn_one, &context);
if (decNumberIsZero(&dn_sum)) /* Pole Error if x was -1 */
{
DFP_EXCEPT (FE_DIVBYZERO);
return -DFP_HUGE_VAL;
}
if (decNumberIsNegative(&dn_sum)) /* Domain Error if x < -1 */
{
DFP_EXCEPT (FE_INVALID);
return DFP_NAN;
}
decNumberLn(&dn_result, &dn_sum, &context);
FUNC_CONVERT_FROM_DN(&dn_result, &result, &context);
return result;
}
示例12: uprv_decNumberCompare
// -------------------------------------
// comparison function. Returns
// Not Comparable : -2
// < : -1
// == : 0
// > : +1
int32_t DigitList::compare(const DigitList &other) {
decNumber result;
int32_t savedDigits = fContext.digits;
fContext.digits = 1;
uprv_decNumberCompare(&result, this->fDecNumber, other.fDecNumber, &fContext);
fContext.digits = savedDigits;
if (decNumberIsZero(&result)) {
return 0;
} else if (decNumberIsSpecial(&result)) {
return -2;
} else if (result.bits & DECNEG) {
return -1;
} else {
return 1;
}
}
示例13: uprv_decContextDefault
UBool
DigitList::operator==(const DigitList& that) const
{
if (this == &that) {
return TRUE;
}
decNumber n; // Has space for only a none digit value.
decContext c;
uprv_decContextDefault(&c, DEC_INIT_BASE);
c.digits = 1;
c.traps = 0;
uprv_decNumberCompare(&n, this->fDecNumber, that.fDecNumber, &c);
UBool result = decNumberIsZero(&n);
return result;
}
示例14: PREFIXED_FUNCTION_NAME
int
PREFIXED_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y)
{
decNumber dn_x, dn_y, result;
decContext context;
decContextDefault(&context, DEFAULT_CONTEXT);
FUNC_CONVERT_TO_DN(&x, &dn_x);
FUNC_CONVERT_TO_DN(&y, &dn_y);
if(decNumberIsNaN(&dn_x) || decNumberIsNaN(&dn_y))
return -1;
decNumberCompare(&result, &dn_x, &dn_y, &context);
return !decNumberIsNegative(&result) && !decNumberIsZero(&result);
}
示例15: INTERNAL_FUNCTION_NAME
int
INTERNAL_FUNCTION_NAME (DEC_TYPE x, DEC_TYPE y)
{
decNumber dn_x;
decNumber dn_y;
decNumber dn_result;
decContext context;
FUNC_CONVERT_TO_DN(&x, &dn_x);
FUNC_CONVERT_TO_DN(&y, &dn_y);
if(decNumberIsNaN(&dn_x) || decNumberIsNaN(&dn_y))
return 0;
decNumberCompare (&dn_result, &dn_x, &dn_y, &context);
return (-decNumberIsNegative (&dn_result)) ||
(!decNumberIsNegative (&dn_result) && !decNumberIsZero (&dn_result));
}