Reputation: 17457
I'm on environment that has no printf()
or any equivalent, so I'm writing it myself. But I have no idea how to perform such a conversion of float
types. I tried to seen how gcc does it, but it's really hard to understand.
Upvotes: 0
Views: 2270
Reputation: 155475
Floating-point formatting is very easy to get wrong. Writing a simplistic implementation that works for "most" numbers is deceptively easy, but it is likely to break on very large numbers, very small numbers, and numbers close to zero, not to mention IEEE754 subnormals, infinities and NaN. It might also get wrong the trailing decimals, failing to provide a string representation that allows reproducing the float bit-by-bit.
Fortunately, there are libraries out there that implement the work of formatting floating-point numbers, either for education, for embedded systems, or to improve on some aspect of standard-library formatting. If possible, I recommend that you incorporate David Gay's dtoa
library, which has been extensively tested in Python and elsewhere.
Upvotes: 4
Reputation: 145899
You can take a look at musl libc implementation. musl
is a lightweight libc.
In fmt_fp
function defined in src/stdio/vfprintf.c
, they are basically converting a float to a string for fprintf
conversion specifiers like f
.
If you search on the internet with keyword ftoa
, you will find some other implementations of functions converting a float
to a string.
Upvotes: 2