Any binary floating point can be formatted exactly in decimal. The resulting string might be somewhat long, but it is possible. In my article on floating point I cover the importance of precision, and now I want this function. This challenge is to write a program, or function, that takes a floating point value as input and formats an exact decimal string as output.
To ensure we are working with the correct floating point numbers a precise format must be provided as input to the program. This format will be two integers
Significand Exponent, where the actual floating point value is
Significand * 2 ^ Exponent. Note that either value can be negative.
- The range and precision of at least a 32-bit float must be supported (no input will go beyond that)
- The decimal formatted value must be an exact representation (simply close enough to guarantee a correct round-tip back to float is not good enough)
- We don't trust standard library floating point formatting functions to be correct enough nor fast enough (ex:
printf), and thus they may not be used. You must do the formatting. Integral formatting/conversion functions are allowed.
- There may not be any leading or trailing zeros, except for the required one leading zero in front of the
.if there is no whole number component
- A function, or whole program, is allowed.
1 -2 => 0.25 17 -3 => 2.125 -123 11 => -251904 17 50 => 19140298416324608 23 -13 => 0.0028076171875 3 120 => 3987683987354747618711421180841033728 3 -50 => 0.00000000000000266453525910037569701671600341796875 -3 -50 => -0.00000000000000266453525910037569701671600341796875 10 -2 => 2.5 -12345 -3 => -1543.125 0 0 => 0 161 -4 => 10.0625 512 -3 => 64
Shortest code wins.