Así que tienen una función que se ve algo como esto:¿Puede modificar las variables de alguna manera?
float function(){
float x = SomeValue;
return x/SomeOtherValue;
}
En algún momento, esta función se desborda y devuelve un valor negativo muy grande. Para tratar de localizar a exactamente donde esto ocurría, añadí una declaración cout para que la función era la siguiente:
float function(){
float x = SomeValue;
cout << x;
return x/SomeOtherValue;
}
y funcionó! Por supuesto, resolví el problema completamente usando un doble. Pero tengo curiosidad de por qué la función funcionó correctamente cuando lo presenté. ¿Es esto típico, o podría haber un error en otro lugar que me estoy perdiendo?
(Si te sirve de ayuda, el valor almacenado en el flotador es sólo un valor entero, y no es particularmente grande. Yo sólo lo puso en un flotador para evitar la fundición.)
También hay una nota de GCC para esto en http://gcc.gnu.org/wiki/x87note Debido a este maravilloso comportamiento, la comparación de los cálculos de coma flotante también se rompe inherentemente, a menos que se utilicen valores precalculados. – hazzen