76 inline char*
prettify (
char* buffer,
int length,
int k)
noexcept
79 const int kk = length + k;
81 if ((length <= kk) && (kk <= 21))
83 memset (buffer + length,
'0', kk - length);
86 return &buffer[kk + 2];
88 else if ((0 < kk) && (kk <= 21))
90 if ((length - kk <= 16) && (kk <= 7))
93 memcpy (tmp, &buffer[kk], 16);
94 memcpy (&buffer[kk + 1], tmp, 16);
98 memmove (&buffer[kk + 1], &buffer[kk], length - kk);
101 return &buffer[length + 1];
103 else if ((-6 < kk) && (kk <= 0))
106 memmove (&buffer[offset], &buffer[0], length);
109 memset (&buffer[2],
'0', offset - 2);
110 return &buffer[length + offset];
112 else if (length == 1)
119 if (length - 1 <= 16)
122 memcpy (tmp, &buffer[1], 16);
123 memcpy (&buffer[2], tmp, 16);
127 memmove (&buffer[2], &buffer[1], length - 1);
130 buffer[length + 1] =
'e';
143 inline char*
format (
char* buffer, uint64_t digits,
int length,
int k)
noexcept
145 const int kk = length + k;
147 if ((kk > 21) || (kk <= -6))
149 length -=
writeDigits (buffer + 1, digits, length);
150 buffer[0] = buffer[1];
152 const int position = (length > 1) ? length + 1 : 1;
153 buffer[position] =
'e';
160 for (
int i = length; i < kk; ++i)
165 buffer[kk + 1] =
'0';
166 return &buffer[kk + 2];
170 length -=
writeDigits (buffer + 1, digits, length);
171 for (
int i = 0; i < kk; ++i)
173 buffer[i] = buffer[i + 1];
176 return &buffer[length + 1];
180 const int offset = 2 - kk;
183 for (
int i = 2; i < offset; ++i)
187 length -=
writeDigits (buffer + offset, digits, length);
188 return &buffer[length + offset];
char * prettify(char *buffer, int length, int k) noexcept
lay out decimal digits as a fixed or scientific number.
Definition format.hpp:76
char * format(char *buffer, uint64_t digits, int length, int k) noexcept
write a decimal significand with the same layout as prettify.
Definition format.hpp:143
int writeDigits(char *buffer, uint64_t digits, int length) noexcept
write the digits of a decimal significand.
Definition digits.hpp:108