设 a1=1.000001,a3=0.0000001,
在单精度的变量环境下做以下操作:
按以下两种算法计算a1与100个a3相加的结果。
方法一:将100个a3逐个加到a1上;
方法二:先将100个a3相加,再加到a1上;
运算结果:方法一得出的是1.000013
方法二得出的是:6.338253*10^22我就不明白了 为什么啊   计算过程中是如何舍入的啊 ?求解~~~

解决方案 »

  1.   


    你确定你的代码是按你说的效果实现的?贴出你的Source Code吧!
      

  2.   

                float a11 = 1.000001f;
                float a12 = 1.000001f;
                float a13 = 1.000001f;
                float a2  = 1.000000f;
                float a31 = 0.0000001f;
                float a32 = 0.0000001f;
                //(2)-(1)
                Console.WriteLine("第(2)题中第(1)题结果为:");
                for (int i = 0; i < 100; i++)
                {
                    a11 = a11 + a31;
                }
                Console.WriteLine("方法一等于:" + a11);
                Console.WriteLine(a11);
                for (int i = 0; i < 99; i++)
                {
                    a31 += a31;
                }
                a12 += a31;
                Console.WriteLine("方法二等于:" + a12);
      

  3.   

    Quote=引用 3 楼 sddzraul 的回复:]
    引用 1 楼 hao1hao2hao3 的回复:引用楼主 sddzraul 的回复:
    设 a1=1.000001,a3=0.0000001,
    在单精度的变量环境下做以下操作:
    按以下两种算法计算a1与100个a3相加的结果。
    方法一:将100个a3逐个加到a1上;
    方法二:先将100个a3相加,再加到a1上;运算结果:方法一得出的是1.000013
    方法二得出的是:6.3382……
    [/Quote]你确定没有错? Console.WriteLine("方法一等于:" + a11);
      Console.WriteLine(a11);
      for (int i = 0; i < 99; i++)
      {
      a31 += a31;  }
      a12 += a31;
      Console.WriteLine("方法二等于:" + a12);红色部分没错?断点看看是不是和你预想的方式一样执行的。
         for (int i = 0; i < 100; i++)
                {
                    //a31 += a31;
                    a32 += a31;
                }
                a12 += a32;