저는 float 24 비트를 사용하여 NXP의 컴파일러 MRK III에 부동 소수점 값을 저장합니다. 24 비트 부동 소수점 값을 데이터 메모리에 3 바이트 16 진수로 저장합니다. 이제 IEEE 754 부동 소수점 변환을 사용하여 이진수에서 실수로 숫자를 검색 할 때 매우 이상하게 보입니다.Float24 (24 비트 부동 소수점)를 16 진수로 변환 하시겠습니까?
주 - - ". 내 컴파일러가 지원 (플로트 (32)와 함께) 24 비트 부동 때문에, 나는이 같은 값 뭔가를 할당하고있어"
내가 예와 이런 식으로 넣어 보자
샘플 프로그램 : 디버그 창에서
이float24 f24test;
float f32test;
f32test= 2.9612;
f24test= (float24)f32test;
출력 (전역 변수) - (동시에 데이터 메모리)를 DM에 저장
f32test = 2.961200e+000
f24test = 2.9612e+000
값 디버거에서 포착 -
f32test = 40 3d 84 4d (in hex)
f24test = 02 3d 84 (in Hex)
문제 : - 지금 변환하려고 할 때 f32test = 40 3d 84 4d (in hex)
이진수가 & 인 경우 IEEE 754를 사용하여 다시 플로팅하면 2.9612를 검색 할 수 있습니다. 동시에 f24test = 02 3d 84 (in Hex)
을 이진 &으로 변환하려고 시도하는 동안 IEEE 754를 사용하여 다시 플로팅하는 동안, 2.9612 대신 몇 가지 이상한 값을 검색 할 수 없었습니다.
나에 대해 언급하는이 위키 페이지로 찾고 있어요 부동 소수점 연산의 - : http://en.wikipedia.org/wiki/Single-precision_floating-point_format
내가 1 개 기호에 대해 동일한 형식을 사용하고있는 경우는 플로트 (24)에 대해 작동하지 않는 이유는 혼란 스러워요 비트, 8 비트 지수 & 15 비트 가수. (float 32에서 1 부호 비트, 8 비트 지수, & 23 비트 가수)
여러분 중 누구라도 제가 f24test = 02 3d 84 (in Hex)
에서 2.9612의 값을 얻을 수 있도록 도와 줄 수 있습니까 ???
제발, 내가
가 (16 진수)에 사전 :
NXP float24 형식에 관한 모든 설명서에 액세스 할 수 있습니까? 웹에서 아무것도 찾을 수 없습니다. 그러나이 문제는 Pascal Cuoq이 설명하는 것처럼 8 비트 지수의 인코딩을 사용하는 것이 분명합니다. – TonyK
@ TonyK 예 ... 있습니다. 그 프로젝트에 대한 기밀 사항이 있기 때문에, 나는 그것에 관한 어떤 정보도 공유 할 수 없지만 Pascal Cuoq에 대한 나의 대답이 뭔가를 설명하기를 바랍니다. :) –
해당 형식을 변환하는 데 필요한 변환 소프트웨어를 찾을 수 없다면 기호, 편향된 지수 및 분수로 해체해야합니다. 그런 다음이 값을 사용하여 float을 생성하는 산술 연산을 수행 할 수 있습니다. –