Tengo un programa que busca rutas en un gráfico y genera el peso acumulado. Todos los bordes en el gráfico tienen un peso individual de 0 a 100 en forma de un flotador con un máximo de 2 decimales.0 + 0 + 0 ... + 0! = 0
En Windows/Visual Studio 2010, para una ruta particular que consta de bordes con 0 ponderaciones, genera el peso total correcto de 0. Sin embargo, en Linux/GCC el programa dice que la ruta tiene un peso de 2.35503e-38
. He tenido muchas experiencias con bichos raros causados por carrozas, pero ¿cuándo 0 + 0 igualaría alguna cosa que no fuera 0?
Lo único que puedo pensar que está causando esto es que el programa trata algunos de los pesos como enteros y usa la coerción implícita para agregarlos al total. ¡Pero 0 + 0.0f todavía es igual a 0.0f! Como solución rápida, reduzco el total a 0 cuando es menor que 0.00001 y eso es suficiente para mis necesidades, por ahora. Pero, ¿qué vodoo causa esto?
NOTA: estoy 100% seguro de que ninguno de los pesos en el gráfico exceder el rango he mencionado y que todos los pesos en este camino en particular son todos 0.
EDIT: Elaborar , He intentado tanto leer los pesos de un archivo como configurarlos en el código de forma manual como igual a 0.0f No se está realizando ninguna otra operación en ellos aparte de agregarlos al total.
¿Puede construir un caso de prueba mínimo? –
@OliCharlesworth Eso es lo que he estado tratando de hacer, hasta ahora sin suerte. La cantidad de código relevante es demasiado para publicar, pero continuaré intentando reproducir el error en un ámbito más pequeño. Esperaba que hubiera un razonamiento obvio detrás de esto. –
Le recomendaría que estudie la definición de máquina épsilon. Esto parece ser lo que está causando tu error aquí. – andre