0 + 0 + 0… + 0 != 0

У меня есть программа, которая находит пути в графе и выводит совокупный вес. Все ребра в графе имеют индивидуальный вес от 0 до 100 в виде числа с плавающей запятой не более чем с двумя знаками после запятой.

В Windows/Visual Studio 2010 для определенного пути, состоящего из ребер с весом 0, выводится правильный общий вес 0. Однако в Linux/GCC программа сообщает, что путь имеет вес 2.35503e-38. У меня было много случаев с сумасшедшими ошибками, вызванными числами с плавающей запятой, но когда 0 + 0 когда-либо равнялось чему-то другому, кроме 0?

Единственное, что, как мне кажется, является причиной этого, это то, что программа обрабатывает некоторые веса как целые числа и использует неявное принуждение, чтобы добавить их к сумме. Но 0 + 0.0f по-прежнему равно 0.0f! В качестве быстрого исправления я уменьшаю общее количество до 0, когда оно меньше 0,00001, и этого пока достаточно для моих нужд. Но какое вуду вызывает это?

ПРИМЕЧАНИЕ.:Я на 100% уверен, что ни один из весов на графике не выходит за пределы диапазона, который я упомянул, и что все веса на этом конкретном пути равны 0.

РЕДАКТИРОВАТЬ:Чтобы уточнить, я пробовали как читать веса из файла, так и вручную устанавливать их в коде равными 0,0f. Никакая другая операция не выполняется с ними, кроме добавления их к сумме.

11
задан Austin Henley 24 April 2012 в 18:51
поделиться