아직 대학에서 C++로 강의를 시작했지만 첫 번째 문제가 있습니다. 우리의 작업은 IEEE 754 표준을 통해 포인트를 부동 ++ C에서 자체 제작 구조를 구현하기 위해 그 것이었다 :C++에서 자체 플로트 구조 만들기
당신이 float를 저장할 수있는 데이터 구조를 생성, 원시 바이트 표현하고 내부 표현을 읽어 s, e 및 m. union과 bit-field-struct의 조합을 사용하십시오. float 번호가 구조의 float 부분에 할당되고 raw 및 s/e/m 표현이 인쇄되는 프로그램을 작성하십시오. raw 및 m에 대해 16 진 출력을 사용하십시오.
이#include <stdio.h> #include <math.h> union { struct KFloat { //Using bit fields for our self made float. s sign, e exponent, m mantissa //It should be unsigned because we simply use 0 and 1 unsigned int s : 1, e : 8, m : 23; }; //One bit will be wasted for our '.' char internal[33]; }; float calculateRealFloat(KFloat kfloat) { if(kfloat.s == 0) { return (1.0+kfloat.m)*pow(2.0, (kfloat.e-127.0)); } else if (kfloat.s == 1) { return (-1.0)*((1.0+kfloat.m)*pow(2.0, (kfloat.e-127.0))); } //Error case when s is bigger 1 return 0.0; } int main(void) { KFloat kf_pos = {0, 128, 1.5707963705062866};//This should be Pi (rounded) aka 3.1415927 KFloat kf_neg = {1, 128, 1.5707963705062866};//Pi negative float f_pos = calculateRealFloat(kf_pos); float f_neg = calculateRealFloat(kf_neg); printf("The positive float is %f or ",f_pos); printf("%e\n", f_pos); printf("The negative float is %f or ",f_neg); printf("%e", f_neg); return 0; }
이 코드 첫 번째 오류는 가수가 절대적으로 잘못된 것을 명확하지만 난 방법이 문제를 해결하는 방법 아무 생각이 : 내가 지금까지 가지고 무엇
는 다음과 같습니다.
가수는 정수 여야합니다. 가수에 대한 부동 소수점 값을 가진 IEEE에 대한 설명은 진실을 말하지 않습니다. – john
귀하의 요구 사항은 구체적으로 '노동 조합'을 요구합니다. – Chad
하지만 노조는 어떻게 구현해야합니까? 나는 원시적이고 내적인 represantation이 무엇을 의미하는지 모른다. – Jack