Question

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?

Était-ce utile?

La solution

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!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top