| 515 | } |
| 516 | |
| 517 | double ToDouble(const BasicDecimalScalar128& in, bool* overflow) { |
| 518 | // convert int128 to double |
| 519 | int64_t sign = in.value().Sign(); |
| 520 | auto value_abs = BasicDecimal128::Abs(in.value()); |
| 521 | double unscaled = static_cast<double>(value_abs.low_bits()) + |
| 522 | std::ldexp(static_cast<double>(value_abs.high_bits()), 64); |
| 523 | |
| 524 | // scale double. |
| 525 | return (unscaled * sign) / kDoubleScaleMultipliers[in.scale()]; |
| 526 | } |
| 527 | |
| 528 | BasicDecimal128 FromInt64(int64_t in, int32_t precision, int32_t scale, bool* overflow) { |
| 529 | // check if multiplying by scale will cause an overflow. |