When I convert an unsigned 8-bit int to string then I know the result will always be at most 3 chars (for 255) and for an signed 8-bit int we need 4 chars for e.g. "-128".

Now what I'm actually wondering is the same thing for floating-point values. What is the maximum number of chars required to represent any "double" or "float" value as a string?

Assume a regular C/C++ double (IEEE 754) and normal decimal expansion (i.e. no %e printf-formatting).

I'm not even sure if the really small number (i.e. 0.234234) will be longer than the really huge numbers (doubles representing integers)?

## Best Solution

The standard header

`<float.h>`

in C, or`<cfloat>`

in C++, contains several constants to do with the range and other metrics of the floating point types. One of these is`DBL_MAX_10_EXP`

, the largest power-of-10 exponent needed to represent all`double`

values. Since`1eN`

needs`N+1`

digits to represent, and there might be a negative sign as well, then the answer isThis assumes that the exponent is larger than the number of digits needed to represent the largest possible mantissa value; otherwise, there will also be a decimal point followed by more digits.

CORRECTIONThe longest number is actually the smallest representable negative number: it needs enough digits to cover both the exponent and the mantissa. This value is

`-pow(2, DBL_MIN_EXP - DBL_MANT_DIG)`

, where`DBL_MIN_EXP`

is negative. It's fairly easy to see (and prove by induction) that`-pow(2,-N)`

needs`3+N`

characters for a non-scientific decimal representation (`"-0."`

, followed by`N`

digits). So the answer isFor a 64-bit IEEE double, we have