提取 IEEE 754 浮点格式数字的小数部分时出现小错误
Minor error with extracting the fraction part of an IEEE 754 floating format number
所以我有这个函数,我提取了给定 int 的小数部分,以便我可以以十六进制形式输出它。
这是我的代码,其中 result 是小数部分,然后我以十六进制形式打印出来。
// getting fraction part
result = 0;
int count = 0;
for (int which_digit = 23; which_digit >0; which_digit--) {
shifted_value = f >> (23 - count);
int fractionn = (shifted_value & 1) * (1 << which_digit) ;
result += fractionn;
count++;
}
如果给我数字 8,我的程序会正确打印小数部分的十六进制形式。然而,给定另一个数字,如 -0.749000013,我的程序打印 0x3fbe76 而不是 0x3fbe77。
有谁知道我错在哪里
您的循环结束条件是 which_digit > 0
,因此您跳过了位 #0。应该是which_digit >= 0
。您还应该从位 22 而不是 23 开始。
也就是说,您的整个循环可以用简单的 result = f & 0x7fffff;
代替。没必要一点一点的去
所以我有这个函数,我提取了给定 int 的小数部分,以便我可以以十六进制形式输出它。
这是我的代码,其中 result 是小数部分,然后我以十六进制形式打印出来。
// getting fraction part
result = 0;
int count = 0;
for (int which_digit = 23; which_digit >0; which_digit--) {
shifted_value = f >> (23 - count);
int fractionn = (shifted_value & 1) * (1 << which_digit) ;
result += fractionn;
count++;
}
如果给我数字 8,我的程序会正确打印小数部分的十六进制形式。然而,给定另一个数字,如 -0.749000013,我的程序打印 0x3fbe76 而不是 0x3fbe77。
有谁知道我错在哪里
您的循环结束条件是 which_digit > 0
,因此您跳过了位 #0。应该是which_digit >= 0
。您还应该从位 22 而不是 23 开始。
也就是说,您的整个循环可以用简单的 result = f & 0x7fffff;
代替。没必要一点一点的去