Mik*_* T. 5 c# precision double
刚开始学习C#.我计划将它用于繁重的数学模拟,包括数值求解.问题是我在添加和减去double时以及比较时都会出现精度损失.代码及其返回的内容(在评论中)如下:
namespace ex3
{
class Program
{
static void Main(string[] args)
{
double x = 1e-20, foo = 4.0;
Console.WriteLine((x + foo)); // prints 4
Console.WriteLine((x - foo)); // prints -4
Console.WriteLine((x + foo)==foo); // prints True BUT THIS IS FALSE!!!
}
}
}
Run Code Online (Sandbox Code Playgroud)
非常感谢任何帮助和澄清!
令我困惑的是(x + foo)==foo回报True.
查看 MSDN 参考double:https://msdn.microsoft.com/en-AU/library/678hzkk9.aspx
它指出 adouble的精度为 15 到 16 位。
但就数字而言,1e-20和之间的差异4.0为 20 位数字。1e-20尝试添加或减去的行为4.0仅仅意味着1e-20丢失了,因为它无法容纳在 15 到 16 位的精度范围内。
所以,就目前double而言,4.0 + 1e-20 == 4.0并且4.0 - 1e-20 == 4.0。
| 归档时间: |
|
| 查看次数: |
822 次 |
| 最近记录: |