【发布时间】:2012-09-30 04:31:51
【问题描述】:
我惊讶地发现 .NET 中的 System.Numerics.Complex 数据类型不能产生数学上准确的结果。
Complex.Sqrt(-1) != Complex.ImaginaryOne
我得到的不是 (0, 1),而是 (6.12303176911189E-17, 1),这看起来很像舍入错误。
现在我意识到浮点运算有时会导致这样的结果,但通常使用整数会避免舍入错误。
为什么这个看似基本的操作会产生明显错误的结果?
【问题讨论】:
-
字体没坏,没理由闹剧。
-
@HenkHolterman 嗯,这是我能找到的最好的形容词。
-
Double precision problems on .NET 和许多其他的可能重复。
-
@HenkHolterman 我知道。我知道浮点数是如何工作的。这是一个看起来应该可以工作的案例。
-
鉴于 Complex.Sqrt(-1) 应该等于 Complex.ImaginaryOne,如果不是(不)等式检查,建议的比较操作是什么?
标签: c# .net complex-numbers