然而,我在大學的C++講座卻開始了,但我得到了第一個問題。我們的任務是它實現在C++中一個自制的結構,通過IEEE 754標準浮點:在C++中創建自己的浮點結構
創建一個數據結構,它允許你存儲浮點數,閱讀它的原始字節表示和內部表示爲s,e和m。使用union和bit-field-struct的組合。 編寫一個程序,其中浮點數被分配給結構的浮點部分,並打印原始和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;
}
這段代碼的第一個錯誤是明確表示,尾數是絕對錯誤的,但我不知道如何解決這個問題。
你的尾數應該是一個整數。對尾數具有浮點值的IEEE的任何描述都沒有說明真相。 – john 2013-05-02 14:26:48
你的要求特別要求'聯合'。 – Chad 2013-05-02 14:39:26
但我該如何實施工會?我不知道什麼是原始的和內部的譴責。 – Jack 2013-05-02 14:40:42