Задача: нужно преобразовать число с фиксированной точкой в число с плавающей точкой. Нашел в интернете код, немножко переделал под себя и скомпилировал:
int a = 0x001A8000; // Q16.16, число 26.5
float b = a/65536.0;
Код действительно работает.
Подскажите пожалуйста, зачем в данном случае переменная a делится на 65536 (2^16, как я полагаю, связано с количеством разрядов для целой и дробной части)? Как это математически обосновывается?
P.S. Нашел в википедии, что X = X' * Z, где X - число с фиксированной точкой (в моем случае b), X' - целочисленное представление (в моем случае а), а z - 2^-f - вес младшего разряда. Но почему в нашем случае f равно 16 и почему именно используется 2^-f?