【发布时间】:2013-06-12 09:04:06
【问题描述】:
我查看了许多类似的问题,但尚未找到解决方案。目前,-1.978569 是输出而不是 -7.9142766。我正在尝试匹配此页面的输出:http://babbage.cs.qc.cuny.edu/IEEE-754.old/32bit.html
感谢您的宝贵时间!
这是我的代码:
#include <stdio.h>
#include <math.h>
float IEEE_754_to_Float(const unsigned char b[4]) {
int sign = (b[0] >> 7) ? -1 : 1;
unsigned int fraction_bits = ((b[1] & 0x7F) << 16) + (b[2] << 8) + b[3];
float fraction = 0.5f;
unsigned char ii;
for (ii = 0; ii < 24; ++ii)
fraction += ldexpf((fraction_bits >> (23 - ii)) & 1, -(ii + 1));
float significand = sign * fraction;
return ldexpf(significand, 1);
}
int main() {
unsigned char b[]={0xC0, 0xFD, 0x41, 0xC1};
float f=IEEE_754_to_Float(b);
printf("%f\n",f);
return(0); }
【问题讨论】:
-
您的程序在任何地方都没有使用浮点数的指数部分——这可能是个问题。
-
欢迎来到 Stack Overflow。第一个问题好!
-
我的指数计算代码错误,所以它返回 -inf 和 inf。这就是我删除它的原因。此页面上的其他代码有效。谢谢!感谢您的热烈欢迎,约翰!
-
为什么不用
union { unsigned char b[4]; float f }或者只用memcpy(&f, b, sizeof(f))
标签: c floating-point converter ieee-754