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