У меня есть сложная проблема, которую я не понимаю. У меня есть массив uint8_t, который мне нужно преобразовать в 32-битную с плавающей запятой. Я использую memcpy для выполнения этого ... однако округление кажется выключенным. Может кто-то, пожалуйста, объясните, что происходит/решение этой проблемы, заранее. Массив коэффициентаByteSwap содержит два коэффициента: один в первых четырех байтах и другой во 2-м 4 байтах.точность с плавающей точкой с использованием memcpy C++
static float32_t coefficient[ALLSENSORS][NUM_QUADRATIC_FIELDS];
uint8_t coefficientByteSwap[8];
memcpy(&coefficient[sensor][2], &coefficientByteSwap[0], sizeof(float32_t));
memcpy(&coefficient[sensor][3], &coefficientByteSwap[4], sizeof(float32_t));
пример:
coefficientByteSwap[0] = 0xE8
coefficientByteSwap[1] = 0x32
coefficientByteSwap[2] = 0xB5
coefficientByteSwap[3] = 0xBC
должно быть значение с плавающей точкой: -.022119 , но когда я печатаю его это выходит: -.022119000554
Косвенное литье из 'float' предположений представления, вероятно, плохая идея! –
вы не можете представить это число как плавающую точку. Если вы хотите больше точности, вместо этого вы можете использовать 'double', но нет никакой возможности получить бесконечную точность с переменной конечного размера. –
'BCB532E8' на самом деле' -0.022119000554', а не '-0.22119' –