Precisión de punto flotante en C
En C, los números de punto flotante son precisos hasta un cierto número de decimales. Sin embargo, existen limitaciones para esta precisión, lo que puede generar resultados inesperados.
Declaración del problema
Considere el siguiente fragmento de código:
double a = 0.3;
std::cout.precision(20);
std::cout Como se ilustra, a es ligeramente menor que 0,3, pero cuando se multiplica por 50, b se vuelve ligeramente mayor que 15,0. Esta desviación del resultado esperado se puede atribuir a las limitaciones de la precisión del punto flotante.
Solución
Para obtener los resultados correctos, es fundamental evitar configurar el precisión mayor que la precisión disponible para el tipo numérico. El siguiente fragmento de código revisado demuestra este enfoque:
#include
#include
int main() {
double a = 0.3;
std::cout.precision(std::numeric_limits::digits10);
std::cout ::digits10);
std::cout Este enfoque garantiza que la precisión se establezca en el máximo disponible para el tipo de datos doble. Es importante tener en cuenta que si el ciclo se ejecutara durante un número significativamente mayor de iteraciones, como 5000 en lugar de 50, el error acumulado eventualmente se volvería perceptible, independientemente de la configuración de precisión. Ésta es una limitación inherente de la aritmética de punto flotante.
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