Фиксированная точка в плавающую точку

У меня есть следующий код, я только что скопировал некоторые данные из внешней оперативной памяти в MCU в буфер под названием «данные».

double p32        = 4.294967296e+009;       /// equals to 2^32 in decimal notation
int32_t      longhigh;
uint32_t     longlow;

offset = mapdata();  //Points to the data I want, 55 bit fixed point on HW
longhigh = data[2*offset+1]; //Gets upperpart of data 
longlow =  data[2*offset]; //Gets lower part  
double floating = (longhigh*p32 + longlow); // What is this doing?  How does it work?

Может ли кто-нибудь объяснить мне последнюю строку кода? Почему мы умножаем на p32? Спасибо.


person user1876942    schedule 28.10.2013    source источник


Ответы (1)


Умножение на p32 эквивалентно сдвигу влево на 32 бита. Это также приводит к преобразованию типа продукта (из int в double) и суммы. Таким образом, вы можете по существу хранить 64-битные ints в буфере и преобразовывать их в doubles при необходимости.

person alexsh    schedule 28.10.2013