У меня есть программа, которая находит пути в графе и выводит совокупный вес. Все ребра в графе имеют индивидуальный вес от 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. Никакая другая операция не выполняется с ними, кроме добавления их к сумме.