Pregunta

I have a fx1.15 notation. The underlying integer value is 63183 (register value).

Now, according to wikipedia the the complete length is 15 bits. The value does not fit inside, right?

So assuming it is a fx1.16 value, how do I convert it to a human readable value?

¿Fue útil?

Solución

To convert a fixed-point value into something human-readable, do a floating-point divide by 2 to the number of fractional bits. For example, if there are 15 fractional bits, 2^15 = 32768, so you would use something like this:

int x = <fixed-point-value-in-1.15-format>
printf("x = %g\n", x / 32768.0);

Now converting fixed-point numbers to floating-point and invoking printf() are expensive operations, and they usually destroy any performance gained by using fixed-point. I presume you are only doing this for diagnostic purposes.

Also, note that if your platform is doing fixed-point because floating-point operations are forbidden or not available, then you'll have to do something different, along the lines of manually doing the decimal conversion. Model the integer as the underlying floating-point value multiplied by 32768 and go from there. There's some useful fixed-point code here.

p.s. I'm not sure you're still interested in this answer, ashirk, (I wrote it more for others), but if you are, welcome to Stack Overflow!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top