Math-Ryu
view release on metacpan or search on metacpan
Ryu_Library/ryu/d2fixed.c view on Meta::CPAN
digits /= 10;
}
#ifdef RYU_DEBUG
printf("lastDigit=%u\n", lastDigit);
#endif
if (lastDigit != 5) {
roundUp = lastDigit > 5;
} else {
// Is m * 10^(additionalDigits + 1) / 2^(-e2) integer?
const int32_t requiredTwos = -e2 - (int32_t) precision - 1;
const bool trailingZeros = requiredTwos <= 0
|| (requiredTwos < 60 && multipleOfPowerOf2(m2, (uint32_t) requiredTwos));
roundUp = trailingZeros ? 2 : 1;
#ifdef RYU_DEBUG
printf("requiredTwos=%d\n", requiredTwos);
printf("trailingZeros=%s\n", trailingZeros ? "true" : "false");
#endif
}
if (maximum > 0) {
append_c_digits(maximum, digits, result + index);
index += maximum;
Ryu_Library/ryu/d2fixed.c view on Meta::CPAN
#endif
// 0 = don't round up; 1 = round up unconditionally; 2 = round up if odd.
int roundUp = 0;
if (lastDigit != 5) {
roundUp = lastDigit > 5;
} else {
// Is m * 2^e2 * 10^(precision + 1 - exp) integer?
// precision was already increased by 1, so we don't need to write + 1 here.
const int32_t rexp = (int32_t) precision - exp;
const int32_t requiredTwos = -e2 - rexp;
bool trailingZeros = requiredTwos <= 0
|| (requiredTwos < 60 && multipleOfPowerOf2(m2, (uint32_t) requiredTwos));
if (rexp < 0) {
const int32_t requiredFives = -rexp;
trailingZeros = trailingZeros && multipleOfPowerOf5(m2, (uint32_t) requiredFives);
}
roundUp = trailingZeros ? 2 : 1;
#ifdef RYU_DEBUG
printf("requiredTwos=%d\n", requiredTwos);
printf("trailingZeros=%s\n", trailingZeros ? "true" : "false");
#endif
digits /= 10;
}
#ifdef RYU_DEBUG
printf("lastDigit=%u\n", lastDigit);
#endif
if (lastDigit != 5) {
roundUp = lastDigit > 5;
} else {
// Is m * 10^(additionalDigits + 1) / 2^(-e2) integer?
const int32_t requiredTwos = -e2 - (int32_t) precision - 1;
const bool trailingZeros = requiredTwos <= 0
|| (requiredTwos < 60 && multipleOfPowerOf2(m2, (uint32_t) requiredTwos));
roundUp = trailingZeros ? 2 : 1;
#ifdef RYU_DEBUG
printf("requiredTwos=%d\n", requiredTwos);
printf("trailingZeros=%s\n", trailingZeros ? "true" : "false");
#endif
}
if (maximum > 0) {
append_c_digits(maximum, digits, result + index);
index += maximum;
#endif
// 0 = don't round up; 1 = round up unconditionally; 2 = round up if odd.
int roundUp = 0;
if (lastDigit != 5) {
roundUp = lastDigit > 5;
} else {
// Is m * 2^e2 * 10^(precision + 1 - exp) integer?
// precision was already increased by 1, so we don't need to write + 1 here.
const int32_t rexp = (int32_t) precision - exp;
const int32_t requiredTwos = -e2 - rexp;
bool trailingZeros = requiredTwos <= 0
|| (requiredTwos < 60 && multipleOfPowerOf2(m2, (uint32_t) requiredTwos));
if (rexp < 0) {
const int32_t requiredFives = -rexp;
trailingZeros = trailingZeros && multipleOfPowerOf5(m2, (uint32_t) requiredFives);
}
roundUp = trailingZeros ? 2 : 1;
#ifdef RYU_DEBUG
printf("requiredTwos=%d\n", requiredTwos);
printf("trailingZeros=%s\n", trailingZeros ? "true" : "false");
#endif
( run in 0.345 second using v1.01-cache-2.11-cpan-0d8aa00de5b )