下面的代码很简单,将32位整数从传递的对象转换为函数,32位整数表示浮点数。我已经用在线计算器检查过,我得到的符号,指数和mantessa正确的方式,但奇怪的是我得到的答案错了。IEEE754到浮点C#
任何人都可以请检查,如果我是数学(或可能编程)做错了莫名其妙?!
问候
public double FromFloatSafe(object f)
{
uint fb = Convert.ToUInt32(f);
uint sign, exponent = 0, mantessa = 0;
uint bias = 127;
sign = (fb >> 31) & 1;
exponent = (fb >> 23) & 0xFF;
mantessa = (fb & 0x7FFFFF);
double fSign = Math.Pow((-1), sign);
double fMantessa = 1 + (1/mantessa);
double fExponent = Math.Pow(2, (exponent -bias));
double ret = fSign * fMantessa * fExponent;
return ret;
}
'BitConverter.GetBytes(FB)和'那么'BitConverter.ToSingle()'? –
使用'Math.Pow'作为fSign有点夸张:-)'sign == 0? 1:-1'。这是尾数,而不是mantessa。 – xanatos
为什么您将浮点数作为整数传递?你究竟在做什么? C#可以处理强制转换,您为什么使用错误的数据类型? – Luaan