17#if(BOTAN_MP_WORD_BITS == 64)
18 const word conversion_radix = 10000000000000000000U;
19 const word radix_digits = 19;
21 const word conversion_radix = 1000000000U;
22 const word radix_digits = 9;
26 const size_t digit_estimate =
static_cast<size_t>(1 + (this->
bits() / 3.32));
29 const size_t digit_blocks = (digit_estimate + radix_digits - 1) / radix_digits;
35 std::vector<word> digit_groups(digit_blocks);
37 for(
size_t i = 0; i != digit_blocks; ++i) {
40 digit_groups[i] = remainder;
46 std::vector<uint8_t> digits(digit_blocks * radix_digits);
48 for(
size_t i = 0; i != digit_blocks; ++i) {
49 word remainder = digit_groups[i];
50 for(
size_t j = 0; j != radix_digits; ++j) {
52 const word digit = remainder % 10;
54 digits[radix_digits * i + j] =
static_cast<uint8_t
>(digit);
59 while(!digits.empty() && digits.back() == 0) {
67 s.reserve(1 + digits.size());
74 for(
auto i = digits.rbegin(); i != digits.rend(); ++i) {
75 s.push_back(*i +
'0');