-1

나는 이해가 안되는 까다로운 문제가 있습니다. 32 비트 부동 소수점으로 변환해야하는 uint8_t 배열이 있습니다. 나는 그것을 달성하기 위해 memcpy를 사용하고있다. 그러나 반올림은 꺼져있는 것처럼 보인다. 누군가이 현상에 대해 설명해 주시겠습니까 /이 문제에 대한 해결책, 미리 감사드립니다. coefficientByteSwap 배열에는 첫 번째 4 바이트에 두 개의 계수가 있고 두 번째 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

+0

간접 캐스팅 아마 좋은 생각이다! –

+0

해당 숫자를 부동 소수점으로 표시 할 수 없습니다. 더 정밀도를 원하면'double'을 대신 사용할 수 있습니다. 그러나 유한 크기의 변수로 무한 정밀도를 얻는 방법은 없습니다. –

+2

'BCB532E8'은 실제로'-0.222119'가 아니라'-0.022119000554'입니다. –

답변

3

당신의 가정은 잘못된 것입니다. 이것 좀 봐 :

float f = -.022119; 
std::cout << std::setprecision(20) << f << std::endl; 

인쇄 : -0.022119000554084778

float` 표현 가정`에서
+0

왜이 ????? – user2494298

+5

@ user2494298 : 10 진수 2/3을 나타내는 오류와 같습니다. 그것은 무한대로 반복되므로 어딘가에서 잘라야합니다. –

관련 문제