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.
Specifics:
- 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.
Examples:
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.
.0? \$\endgroup\$0.abcis not a leading zero, thenabc.0isn't a trailing one. \$\endgroup\$.0for whole numbers when dealing with floating point numbers. See for example Python:str(1.0) == '1.0'versusstr(1) == '1'. Your logic is still inconsistent. \$\endgroup\$