#### Do you have a question? Post it now! No Registration Necessary

Re: Float to ASCII conversion?

Or convert the whole thing to fixed point. If you can live with that you

only need to do shift operations. You need to have registers in the form

integer.decimal each of which having a size of max. exp bits. Place a 1 in

the integer part, copy the mantissa left aligned into the decimal part and

shift both registers left (pos. exp) or right (neg. exp) for exp bits

(unbias exp first). The result is a positive fixed point number in your

registers 'integer.decimal'. If the FP number had the sign bit set then

convert it to negative. The fixed notation is easier to convert to ASCII.

--

Wil

Wil

Re: Float to ASCII conversion?

... snip ...

The problem there is that the solution is specific to the FP

format, and thus non-portable. This may not matter in most

embedded systems. You can avoid this by simply multiplying (or

dividing) by 10.0 until the 0.1 .. 1.0 range is reached. You can

improve this somewhat by preliminary use of a constant 10.0ENnn,

where nn is such that the overall value is exact. This will

greatly reduce the accumulated roundoff errors. But don't try to

'improve' that by replacing division by multiplication with 0.1

etc., which will really create roundoff problems.

--

Chuck F ( snipped-for-privacy@yahoo.com) ( snipped-for-privacy@worldnet.att.net)

Available for consulting/temporary embedded and systems.

Chuck F ( snipped-for-privacy@yahoo.com) ( snipped-for-privacy@worldnet.att.net)

Available for consulting/temporary embedded and systems.

We've slightly trimmed the long signature. Click to see the full one.

Re: Float to ASCII conversion?

Hello, Grant!

You wrote on 19 Feb 2004 22:24:01 GMT:

GE> Can anybody point me to reference material on converting a

Try googling for dtoa() instead - that's the internal function which

does all the actual work. I still had to add some wrapper around it to

make it simple enough to use, but it is at least a good starting

point...

Regards,

Arkady.

You wrote on 19 Feb 2004 22:24:01 GMT:

GE> Can anybody point me to reference material on converting a

*GE> floating point value (IEEE 32-bit) to ASCII? I googled c.a.e**GE> and this question has come up many times.*Try googling for dtoa() instead - that's the internal function which

does all the actual work. I still had to add some wrapper around it to

make it simple enough to use, but it is at least a good starting

point...

Regards,

Arkady.

Re: Float to ASCII conversion?

Here's how I did it, roughly. It was a few years ago and using Forth.

Make a lookup table of floats for 10^n covering the range of interest.

Test your float against this table to find the closest smaller power

of ten. This is quite fast, you compare the exponents first and use a

binary search and don't use fp subtraction.

Divide your float by this power of ten offset by several places in the

LUT (can't remember, but it makes a number smaller by several decades)

to give an integer mantissa where the result is in the range 10000000

to 9999999. Then manipulate and print the integer as required,

inserting a decimal point and using the LUT index to yield the

exponent.

Something like that - the exact details I don't recall. You have to

allow for signs and missing bits of course, and you have to trap float

zero, but the end result can be quite quick (depending on hardware) as

it only uses one fp operation (the divide).

My routine was for an engineering application. It aligned to 1E3

intervals and inserted SI prefixes.

--

Syd

Syd

#### Site Timeline

- » Atmel STK500 beginner Flash mem verification problem
- — Next thread in » Embedded Programming

- » How does ethernet auto uplink work?
- — Previous thread in » Embedded Programming

- » Use of soft float?
- — Newest thread in » Embedded Programming

- » Strumenti II, la vendemmia
- — The site's Newest Thread. Posted in » Electronics Hobby (Italian)