tengo un getSlope función que toma como parámetros 4 dobles y devuelve otro doble calculada usando estos parámetros dados de la siguiente manera:pérdida inesperada de precisión cuando se divide dobles
double QSweep::getSlope(double a, double b, double c, double d){
double slope;
slope=(d-b)/(c-a);
return slope;
}
El problema es que cuando se llama a esta función con argumentos por ejemplo:
getSlope(2.71156, -1.64161, 2.70413, -1.72219);
el resultado devuelto es:
10.8557
y este no es un buen resultado para mis cálculos. He calculado la pendiente usando Mathematica y el resultado de la pendiente para los mismos parámetros es:
10.8452
o más dígitos de precisión:
10.845222072678331.
El resultado devuelto por mi programa no es bueno en mis cálculos adicionales. Además, no entiendo cómo devuelve el programa 10.8557 a partir de 10.845222072678331 (suponiendo que este es el resultado aproximado de la división)? ¿Cómo puedo obtener el buen resultado para mi división?
gracias de antemano, Madalina
puedo imprimir el resultado utilizando la línea de comandos:
std::cout<<slope<<endl;
Puede ser que mis parámetros no son tal vez bueno, ya que los leo de otro programa (que calcula un gráfico; después de leer estos parámetros desde su gráfica, los he visualizado para ver su valor, pero tal vez los vectores mostrados no tienen la misma precisión interna para el valor calculado ... No sé, es realmente extraño . Algunos numéricos aparecen los errores ..)
Cuando se calcula el gráfico del que estoy leyendo mis parámetros, se usan algunas librerías numéricas escritas en C++ (con plantillas). No se usa OpenGL para este cálculo.
gracias, Madalina
Comprueba cómo se compiló el método en asm. Puedes hacer eso en el depurador, creo (al menos en Visual Studio). –
Mi Windows calc da tan buenos resultados como Mathematica: D – klew
¿Qué compilador, qué plataforma? – peterchen