我有一个处理一些地理坐标在.NET中的方法,我有一个结构,存储一个坐标对,如果256传入一个坐标,它变为0.但是,在一个特定的实例计算大约255.99999998的值,并因此存储在结构中。当它在ToString()中打印时,它变成了256,这不应该发生 - 256应该是0.我不介意打印255.9999998,但是当调试器显示255.99999998时打印256是一个问题。它存储和显示0会更好。如何解决一些舍入错误?
特别是有比较的问题。 255.99999998足够接近256,所以它应该等于它。比较双打时我应该怎么做?使用某种类型的epsilon值?
编辑:具体来说,我的问题是,我需要一个值,执行一些计算,然后对这个数字进行计算相反,我需要找回原来的值准确。
使用epsilon是比较浮点值的唯一合法方法。 abs(a - b)<= eps – Andrey 2010-06-23 01:37:38
将两个浮点数与==进行比较是完全合法的,因此几乎没有任何编译器抱怨它。然而,最小的四舍五入误差会导致这两个值在数学说他们应该是不相等的,这就是为什么如果你重视你的理智不建议。 – cHao 2010-06-23 02:08:52
如果您确实只需要将原始值准确恢复,您是不是可以直接存储它,或者是关于原始计算过程的一些信息以及数字? – 2010-06-24 18:52:13