下面的代码简单地将32位整数从要传递的对象转换为函数,该32位整数表示一个浮点数。我已经用在线计算器检查过,我得到了正确的符号,指数和曼荼罗,但奇怪的是我得到了错误的答案。

任何人都可以检查我是否在数学上(或者可能在编程上)以某种方式做错了!

问候

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;
    }

最佳答案

像这样:

  uint fb = Convert.ToUInt32(f);

  return BitConverter.ToSingle(BitConverter.GetBytes((int) fb), 0);

关于c# - IEEE754到浮点C#,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31002050/

10-15 06:22