Compartir a través de


/fp (Especificar comportamiento de punto flotante)

Especifica el comportamiento de punto flotante en un archivo de código fuente.

/fp:[precise | except[-] | fast | strict ]

Marcadores

  • precise
    Es la opción predeterminada.

    Mejora la consistencia de las pruebas de punto flotante de igualdad y desigualdad, deshabilitando las optimizaciones que pudieran cambiar la precisión de los cálculos en punto flotante. Esto es necesario por conformidad estricta con ANSI. De forma predeterminada, el compilador almacena en los registros de 80 bits del coprocesador los resultados intermedios de los cálculos de punto flotante. Esto aumenta la velocidad del programa y reduce su tamaño. No obstante, dado que en el cálculo están involucrados tipos de datos de punto flotante que se representan en la memoria con menos de 80 bits, la utilización de los bits adicionales de precisión (80 bits menos el número de bits de un tipo de punto flotante más pequeño) a través de un cálculo laborioso puede generar resultados incoherentes.

    Con /fp:precise en procesadores x86, el compilador efectuará redondeo en variables de tipo flotante hasta la precisión adecuada para asignaciones y conversiones de tipos y cuando se pasen parámetros a una función. Este redondeo garantiza que los datos no tienen una importancia mayor que la capacidad de su tipo. Un programa compilado con /fp:precise puede ser más lento y voluminoso que otro compilado sin /fp:precise. /fp:precise deshabilita intrinsics; en su lugar, se usan las rutinas de biblioteca en tiempo de ejecución estándar. Para obtener más información, vea /Oi (Generar funciones intrínsecas).

    El siguiente comportamiento de punto flotante se habilita con /fp:precise:

    • Contracciones, o sustitución de múltiples operaciones por una operación compuesta con un único redondeo al final, se habilita con /fp:precise.

    • Las optimizaciones de expresiones que no son válidas para valores especiales (NaN, +infinito, -infinito, +0, -0) no se permiten. Ninguna de las optimizaciones x-x => 0, x*0 => 0, x-0 => x, x+0 => x y 0-x => -x es válida por diversas razones (vea IEEE 754 y el estándar C99).

    • El compilador controlará correctamente comparaciones que impliquen a NaN. Por ejemplo, x != x se evalúa como true si x es NaN y las comparaciones ordenadas que implican a NaN producen una excepción.

    • La evaluación de expresiones seguirá el método FLT_EVAL_METHOD=2 de C99, con una excepción. Al programar para procesadores x86, dado que FPU se establece en precisión de 53 bits, esto se considerará precisión doble.

    • La multiplicación por 1.0 se transforma exactamente en un uso del otro factor. x*y*1.0 se transforma en x*y. Del mismo modo, x*1.0*y se transforma en x*y.

    • La división por 1.0 se transforma exactamente en un uso del dividendo. x*y/1.0 se transforma en x*y. Del mismo modo, x/1.0*y se transforma en x*y.

    El uso de /fp:precise con fenv_access ON deshabilita algunas optimizaciones, como evaluaciones del tiempo de compilación de expresiones de punto flotante. Por ejemplo, si cambia el modo de redondeo con _control87, _controlfp, __control87_2 y el compilador efectúa un cálculo de punto flotante, el modo de redondeo especificado no entrará en vigor hasta que fenv_access se establezca en ON.

    /fp:precise reemplaza la opción del compilador /Op.

  • fast
    Crea el código más rápido en la mayor parte de los casos. /fp:fast no se puede usar con /fp:strict o /fp:precise; se usará la última opción especificada en la línea de comandos. /fp:fast y /fp:except generarán un error del compilador.

    Si se selecciona /Za, /Ze (Deshabilitar extensiones de lenguaje) (compatibilidad con ANSI) y /fp:fast, se puede producir un comportamiento inesperado. Por ejemplo, las operaciones de punto flotante de precisión sencilla no se pueden redondear a precisión sencilla.

  • except[-]
    Modelo de excepción en punto flotante confiable. Se producirán excepciones inmediatamente una vez desencadenado. De forma predeterminada, esta opción está desactivada. Al anexar explícitamente un signo menos a la opción, se deshabilita.

  • strict
    El modelo de punto flotante es el más estricto. /fp:strict hace que fp_contract tenga el valor OFF y fenv_access tenga el valor ON. /fp:except está implícito y se puede deshabilitar explícitamente especificando /fp:except-. Cuando se utiliza con /fp:except-, /fp:strict fuerza la semántica strict en punto flotante pero sin considerar eventos excepcionales.

Comentarios

En una misma compilación, se pueden especificar varias opciones de /fp.

Para controlar el comportamiento de punto flotante por función, vea el pragma float_control.

Casi todas las optimizaciones de punto flotante relacionadas con /fp:strict, /fp:except (y sus correspondientes pragmas) y el pragma fp_contract dependen del equipo. /fp:strict y /fp:except no son compatibles con /clr.

/fp:precise debería tratar la mayoría de los requisitos de punto flotante de una aplicación. Si es necesario, se pueden utilizar /fp:except y /fp:strict, pero el rendimiento se podría ver afectado. Si el rendimiento es muy importante, puede ser conveniente utilizar /fp:fast.

/fp:strict, /fp:fast y /fp:precise son modos de precisión (exactitud). Sólo puede haber uno en vigor en un momento dado. Si se especifican /fp:strict y /fp:precise, el compilador utiliza el que procesa en último lugar. No puede especificar /fp:strict y /fp:fast simultáneamente.

Para obtener más información, vea https://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/floapoint.asp.

Para establecer esta opción del compilador en el entorno de desarrollo de Visual Studio

  1. Abra el cuadro de diálogo Páginas de propiedades del proyecto. Para obtener información detallada, vea Cómo: Abrir páginas de propiedades del proyecto.

  2. Expanda el nodo Propiedades de configuración.

  3. Amplíe el nodo C/C++.

  4. Seleccione la página de propiedades Generación de código.

  5. Modifique la propiedad Modelo de punto flotante.

Para establecer esta opción del compilador mediante programación

Vea también

Referencia

Opciones del compilador

Establecer las opciones del compilador