sumador punto online numericos normalizado normalizada norma metodos mantisa informatica flotante ejemplos coma c++ c floating-point x86

c++ - punto - Cambiar el modo de redondeo de coma flotante



punto flotante normalizado (2)

¿Cuál es la forma más eficiente de cambiar el modo de redondeo * de los números de punto flotante IEEE 754? Una función C portátil sería agradable, pero una solución que usa ensamblaje x86 también está bien.

* Me refiero a los modos de redondeo estándar de hacia el más cercano, hacia cero, y hacia el infinito positivo / negativo


Esta es la solución C estándar:

#include <fenv.h> #pragma STDC FENV_ACCESS ON // store the original rounding mode const int originalRounding = fegetround( ); // establish the desired rounding mode fesetround(FE_TOWARDZERO); // do whatever you need to do ... // ... and restore the original mode afterwards fesetround(originalRounding);

En plataformas hacia atrás que carecen de compatibilidad con C99, es posible que deba recurrir al montaje. En este caso, es posible que desee establecer el redondeo para la unidad x87 (a través de la instrucción fldcw ) y SSE (a través de la instrucción ldmxcsr ).

Editar No es necesario recurrir al ensamblaje para MSVC. Puede usar el _control_fp( ) no totalmente estándar en _control_fp( ) lugar:

unsigned int originalRounding = _control_fp(0, 0); _control_fp(_RC_CHOP, _MCW_RC); // do something ... _control_fp(originalRounding, _MCW_RC);

Puede leer más sobre _control_fp () en MSDN .

Y, para completar, un anillo decodificador para los nombres de macro para modos de redondeo:

rounding mode C name MSVC name ----------------------------------------- to nearest FE_TONEAREST _RC_NEAR toward zero FE_TOWARDZERO _RC_CHOP to +infinity FE_UPWARD _RC_UP to -infinity FE_DOWNWARD _RC_DOWN


this podría ayudar.

Editar: Yo diría que necesitarías tu propia función. Puede usar el ensamblaje dentro de C.

Pero si registras el tamaño es de 64bits, redondearlo a 32 bits haría tus cálculos más rápidos. En realidad lo hará más lento. Recuerde que los cálculos de 64 bits son fáciles para un microprocesador de 64 en lugar de 2-32 bits. No sé exactamente qué quieres lograr. Sé que el rendimiento depende de tus criterios.