一个获取当前程序占用内存的代码,
测试时:System.Diagnostics.Process.GetCurrentProcess().WorkingSet64 = 234975232.0
//写法1,结果:223.79296875
double iPreMemSize = (double)System.Diagnostics.Process.GetCurrentProcess().WorkingSet64 / (1024.0 * 1024.0);//写法2,结果:223.97265625
double iPreMemSize = (double)System.Diagnostics.Process.GetCurrentProcess().WorkingSet64 / 1024.0 / 1024.0;
问题就是运算中乘除运算的顺序问题,我的倾向是:如果除运算能拆成乘运算的,应先将乘运算结合,然后在做除法运算,这样就可以降低误差,因为除法运算更容易出现舍入问题,从而出现误差。是这样吗?
这个问题虽然小,其实很有意义,特别是需要精确结果的时候,但是往往这个问题被忽略了,以前做的一个erp中发现里面不同的人写的计算公式多种多样,这样无形当中就使数据不够精确。
究竟怎样写比较精确呢?

解决方案 »

  1.   

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                double a = 234975232.0 / (1024.0 * 1024.0);
                double b = 234975232.0 / 1024.0 / 1024.0;
                Console.WriteLine(a);
                Console.WriteLine(b);
            }
        }
    }
    224.08984375
    224.08984375
    Press any key to continue . . .
    结果完全一样。
      

  2.   

    其实你
    double iPreMemSize = (double)System.Diagnostics.Process.GetCurrentProcess().WorkingSet64 / 1048567d;更好
      

  3.   

    System.Diagnostics.Process.GetCurrentProcess().WorkingSet64
    2次不一样不能作数的,先保存到1个变量里。
      

  4.   

    oh,犯了一个错误,我取内存时候用了两个变量取的,所以值不同。
    其实这个例子不同合适,因为是double类型的,我应该设置为一个固定精度的小数,应该更能说明问题
      

  5.   

    我本来是这样写的,忘了考虑内存变化了,犯困了//写法1,结果:223.79296875
    double iPreMemSize = (double)System.Diagnostics.Process.GetCurrentProcess().WorkingSet64 / (1024.0 * 1024.0);//写法2,结果:223.97265625
    double iTemp = (double)System.Diagnostics.Process.GetCurrentProcess().WorkingSet64 / 1024.0 / 1024.0;
      

  6.   

    抱歉,举的例子有点问题,发帖的时候随便拿一句代码改的,应该找多次取舍小数点后复合计算的例子(以前在做项目的时候涉及到订单及订单商品相关计算时遇到过),就会比较出差别,单单使用double不取舍的话,结果是比较相近的