2010-01-18 42 views
11

Mientras que, por lo que recuerdo, IEEE 754 no dice nada sobre un modo al ras para manejar denormalized numbers más rápido, algunas arquitecturas ofrecen este modo (por ejemplo, http://docs.sun.com/source/806-3568/ncg_lib.html).comportamiento al ras en cero en aritmética de punto flotante

En el caso particular de esta documentación técnica, el manejo estándar de los números desnormalizados es el predeterminado, y el emplasto a cero debe activarse explícitamente. En el modo predeterminado, los números desnormalizados también se manejan en el software, que es más lento.

Trabajo en un analizador estático para C incrustado que intenta predecir los rangos correctos (aunque a veces imprecisos) para los valores que pueden ocurrir en tiempo de ejecución. Su objetivo es ser correcto porque se pretende que sea utilizable para excluir la posibilidad de que algo vaya mal en el tiempo de ejecución (por ejemplo, para el código incrustado crítico). Esto requiere haber capturado todos los comportamientos posibles durante el análisis, y por lo tanto todos los valores posibles producidos durante los cálculos de coma flotante.

En este contexto, mi pregunta es doble:

  1. entre las arquitecturas integradas, están allí arquitecturas que sólo ofrecen ras a cero? Quizás no tendrían derecho a anunciarse como "IEEE 754", pero podrían ofrecer operaciones de coma flotante de estilo IEEE 754 lo suficientemente cerca.

  2. Para las arquitecturas que ofrecen tanto, en un contexto integrado, no es ras a cero probabilidades de ser activado por el sistema de, con el fin de hacer que el tiempo de reacción más predecible (una restricción común para estos sistemas embebidos)?

Manejo de limpiar-a-cero en la aritmética de intervalos que utilizo para los valores de punto flotante es bastante simple si sé que tengo que hacerlo, mi pregunta es más si tengo que hacerlo.

+0

Buena pregunta, bien planteada. No soy un experto en sistemas integrados, pero sospecho que no hay una respuesta clara. Dependería únicamente de su entorno particular de usuario final. – GManNickG

Respuesta

7

Sí a ambas preguntas. Hay plataformas que solo admiten descarga a cero, y hay muchas plataformas en las que el valor predeterminado es flush-to-zero.

También debe tener en cuenta que muchas plataformas integradas y dsp utilizan el modo "Denormals Are Zero", que es otra arruga en la semántica de coma flotante.


Editar explicación adicional de FTZ vs. DAZ:

En FTZ, cuando una operación produciría un resultado denormal bajo la aritmética usual, se devuelve en lugar de un cero. Tenga en cuenta que algunas implementaciones siempre se nivelan al cero positivo, mientras que otras pueden arrojar al cero positivo o negativo. Probablemente sea mejor no depender de ninguno de los comportamientos.

En DAZ, cuando una entrada a una operación es un denormal, se reemplaza un cero en su lugar. Una vez más, no hay garantía general sobre qué cero será sustituido.

Algunas implementaciones que admiten estos modos les permiten configurarse de forma independiente (y algunos admiten solo uno de los dos), por lo que puede ser necesario que usted pueda modelar cualquiera de los modos de forma independiente o conjunta.

Tenga en cuenta también que algunas implementaciones combinan estos dos modos en "Flush to Zero". El modo "Flush to zero" de ARM VFP es FTZ y DAZ, por ejemplo.

+0

Hoy implementé la aritmética de intervalos que a la vez abarca todas las posibilidades de FTZ, DAZ (enjuague a +0 o cero igual) y subnormales IEEE 754. Ninguna de nuestras pruebas de regresión mostró ninguna diferencia en comparación con la aritmética anterior, IEEE 754 solamente. Por lo tanto, probablemente no será necesario molestar a los usuarios con una opción para esto, el nuevo modo debería hacer felices a todos. Esta es una cosa muy buena. ¡Gracias de nuevo! –

+0

Impresionante, feliz de ayudar. –

+0

¿Cuál sería la practicidad de realizar matemática de coma flotante para que cualquier bit de mantisa que representara valores más pequeños que el valor normalizado más pequeño se redondeara? Pensaría que podría ser más barato que tratar con valores desnormalizados, ya que todos los números de coma flotante tendrían la misma representación. Solo la etapa de "limpieza final" tendría que cambiar. – supercat

2

Los núcleos ARM Cortex tienen una opción de descarga a cero, difícil de ver cómo se puede ignorar. Por otra parte, no tome consejos comerciales de un foro. Habla con tus clientes

+0

Los usuarios existentes son geniales, usan plataformas sanas, entienden los problemas de punto flotante y llegan a la longitud de desactivación de la generación silenciosa de 'fmadd' por su compilador para hacer que los errores de redondeo sean más predecibles. Son los posibles usuarios que me interesan. Gracias por sus comentarios. –

Cuestiones relacionadas