¿Cuál es el uso de feholdexcept etc.?

2 minutos de lectura

La documentación (en los estándares) para todos los fenv.h es bastante confuso, pero estoy especialmente confundido acerca de feholdexcept y el concepto de “modo continuo” para una excepción de coma flotante. Por lo que puedo decir, en cualquier implementación de punto flotante IEEE, las excepciones son sin señalización/”sin parar” de forma predeterminada, y el fenv.h las interfaces parecen no proporcionar ninguna forma de habilitar un modo de señalización a menos que sea el predeterminado. ¿Es todo el concepto de feholdexcept inútil excepto en sistemas no IEEE o sistemas con extensiones no estándar para configurar la máscara de excepción de señalización?

Suponga que está implementando una biblioteca y no sabe nada acerca de lo que sus llamadores podrían hacer en el entorno de punto flotante antes de llamar a su código. Podrían desenmascarar una excepción e instalar un controlador de trampas personalizado que haga que la división por cero produzca el valor 42. Suponga que su biblioteca depende de tener un comportamiento IEEE-754 predeterminado para la división por cero. los feholdexcept función le da un medio para hacer cumplir este comportamiento. El entorno de la persona que llama, completo con su excepción desenmascarada, se puede restaurar usando el fesetenv función.

Es cierto que este es un caso de uso bastante oscuro, pero francamente todo en fenv.h es bastante oscuro para la mayoría de los programadores.

  • Teniendo en cuenta que para la biblioteca estándar, a menos que se documente lo contrario, todas las funciones deben llamarse en el entorno de punto flotante predeterminado para comportarse de acuerdo con la especificación, creo que sería bastante razonable que los autores de bibliotecas de terceros también pongan la carga en la llamada solicitud. Especialmente porque cualquier uso de fe* las funciones pueden activar el compilador (aunque no GCC…) para omitir las optimizaciones de punto flotante que podrían hacer que se pierdan las excepciones…

    – R.. GitHub DEJA DE AYUDAR A ICE

    14 de junio de 2011 a las 4:22

  • @R..: El <fenv.h> las funciones son generalmente algo deficientes tanto en el diseño como en la documentación. Iría tan lejos como para decir que podrían ser la característica más débil de la biblioteca C. Si tiene alguna sugerencia de mejora, estaré encantado de pasarla al grupo de trabajo de punto flotante de C.

    – Esteban Canon

    14 de junio de 2011 a las 6:36


¿Ha sido útil esta solución?