一个获取当前程序占用内存的代码,
测试时: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中发现里面不同的人写的计算公式多种多样,这样无形当中就使数据不够精确。
究竟怎样写比较精确呢?
测试时: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中发现里面不同的人写的计算公式多种多样,这样无形当中就使数据不够精确。
究竟怎样写比较精确呢?
解决方案 »
- 求助类型转换问题
- WinForm的DataGridView如何设置选中某一行?
- 为什么存进TXT中中文就变成乱码了??
- 个字符串里 即包含 ON 又包含 GTPU ,这个正则该怎么写?
- 有没有哪位高手能帮我说明一下wndproc这个函数?
- .net能不能编写类似于Java的Applet小程序?
- 如何解决空值的问题
- 问题:正由另一进程使用,因此该进程无法访问该文件
- 懂b\s编程的进来帮帮忙啊
- 摸板控件如何取得控件里的子控件的html里的ID,我用UniqueID和ID和ClientID都取不到,只能取到服务断ID
- 新手求救..使用C#開發CRM SYSTEM
- select @@identity 的用法问题,求解!!!
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 . . .
结果完全一样。
double iPreMemSize = (double)System.Diagnostics.Process.GetCurrentProcess().WorkingSet64 / 1048567d;更好
2次不一样不能作数的,先保存到1个变量里。
其实这个例子不同合适,因为是double类型的,我应该设置为一个固定精度的小数,应该更能说明问题
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;