Comparación de valores de punto flotante con conservación de precisión
La comparación de punto flotante plantea un desafío debido a la pérdida de precisión. Simplemente comparar dobles o flotadores usando == no es confiable.
comparación basada en epsilon
un enfoque implica el uso de un umbral de epsilon (ε) para tener en cuenta la pérdida de precisión:
bool CompareDoubles2(double A, double B) { double diff = A - B; return (diffBool Comparates2 (Double A, Double B). doble diff = a - b; return (diff
Sin embargo, este enfoque puede ser ineficiente.
consideraciones dependientes del contexto
La elección del método de comparación depende del contexto y los valores esperados. Considere las siguientes pitfalls potenciales:
- suponiendo que a == b y b == c implica a == c.
- usando el mismo epsilon para diferentes unidades de medición.
- usando epsilon para ángulos y longitud function.
estándar epsilon
std :: numeric_limits
:: epsilon () representa la diferencia entre 1.0 y el siguiente valor representable por un doble. Se puede usar en las funciones de comparación, pero solo si los valores esperados son inferiores a 1. consecuencias de la aritmética entera
usando dobles para contener los valores enteros pueden conducir a la aritmética correcta, siempre que las fracciones o valores fuera del rango de un entero se eviten. Por ejemplo, 4.0/2.0 igualará 1.0 1.0.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3