我有是找到在一个图上的路径,并输出该累积重量的程序。图形中的所有边都有一个浮点形式的单个权重为0到100,最多有2个小数位。0 + 0 + 0 ... + 0!= 0
在Windows/Visual Studio 2010中,对于包含0权重的边的特定路径,它输出正确的总权重为0.但是,在Linux/GCC上,程序说路径的权重为2.35503e-38
。我曾经有过由浮点数造成的疯狂错误的丰富经验,但是0 + 0何时会等于0以外的任何东西?
我认为导致这的唯一的事情是程序没有把一些权重为整数,使用隐式强制将它们添加到总量。但是0 + 0.0f仍然等于0.0f! 作为一个快速解决方案,我减少总数为0时小于0.00001,这足以满足我的需要,现在。但是什么vodoo导致这个?
注:我100%确信,没有在图中的权重超过我所提到的范围内,所有在这个特殊的路径中的权重都为0
编辑:为了详细,我已经尝试从文件中读取权重并手动将它们设置为代码,等于0.0f除了将它们添加到总数之外,没有其他操作在其上执行。
你能构建一个最小的测试用例吗? – 2012-04-24 18:22:33
@OliCharlesworth这是我一直在努力做到的,迄今没有运气。相关代码的数量太多,但我会继续尝试在较小范围内重现该错误。我希望在这背后会有明显的推理。 – 2012-04-24 18:24:28
我会建议你看看机器epsilon的定义。这似乎是什么导致你的错误在这里。 – andre 2012-04-24 18:28:15