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?
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:
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!