为什么此浮点计算在不同的计算机上给出不同的结果?

我有一个简单的例程,该例程根据浮点值计算纵横比。因此,对于值1.77777779,例程将返回字符串“ 16:9”。我已经在我的机器上测试了它,并且工作正常。


该例程为:


    public string AspectRatioAsString(float f)

    {

        bool carryon = true;

        int index = 0;

        double roundedUpValue = 0;

        while (carryon)

        {

            index++;

            float upper = index * f;


            roundedUpValue = Math.Ceiling(upper);


            if (roundedUpValue - upper <= (double)0.1 || index > 20)

            {

                carryon = false;

            }

        }


        return roundedUpValue + ":" + index;

    }

现在在另一台机器上,我得到了完全不同的结果。因此,在我的计算机上,1.77777779给出了“ 16:9”,但是在另一台计算机上,我得到了“ 38:21”。


慕慕森
浏览 863回答 3
3回答

侃侃尔雅

除非确实需要,否则我不会使用浮点数。由于舍入错误,他们太容易出现这种情况。您可以更改代码以双精度工作吗?(小数点会导致过大的杀伤力)。如果这样做,是否会给出更一致的结果?至于为什么在不同的计算机上有所不同,那么两台计算机之间有什么区别?32位和64位?Windows 7 vs Vista vs XP?英特尔与AMD处理器?(感谢Oded)这样的事情可能是原因。
打开App,查看更多内容
随时随地看视频慕课网APP