然而,我在大学的 C++ 讲座开始了,但我遇到了第一个问题。我们的任务是通过 IEEE 754 标准在 C++ 中实现一个自制的浮点结构:
创建一个数据结构,允许您存储浮点数,读取其原始字节表示及其内部表示为 s、e 和 m。使用联合和位域结构的组合。编写一个程序,将浮点数分配给结构的浮点部分,并打印原始和 s/e/m 表示。对 raw 和 m 使用十六进制输出。
到目前为止,我有以下内容:
#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;
}
这段代码的第一个错误显然是尾数绝对错误,但我不知道如何解决这个问题。