首页 > 解决方案 > 计算结果在某些数字后有偏差

问题描述

下面显示的计算结果应该等于 0,007306897(我参考了 2 本书)。但是当我检查 Watch 1 的结果时,我看到结果等于 0,007306882。我把这个过程分成几个部分。当 c 计算时,问题就出现了。

///Declarations
double sigma = 1.00000000;
double a,b,e,c;
a = (1 / Math.Sqrt(2 * Math.PI)); //calculated properly
c = -(i * i + j * j) / 2.00000000 * (sigma * sigma); //i and j are equal to -2
e = Math.E; //calculated properly
b = Math.Pow(e, c); 
result=a * b;

标签: c#doublecalculation

解决方案


不幸的是,双精度类型不是很准确。下面的链接显示了一些像 1.05 这样的数字不能被 double 类型准确存储。

http://www.binaryconvert.com/convert_double.html

对于正常使用,它通常足够准确,如果您需要精确到您描述的级别,您可能需要使用二进制编码十进制之类的东西。这将意味着正常的数学库将无法工作。您可以尝试在一些物理网站上询问他们在对复杂系统进行建模以保持准确性时使用什么。


推荐阅读