"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué la aritmética de punto flotante difiere entre x86 y x64 en Visual Studio 2010?

¿Por qué la aritmética de punto flotante difiere entre x86 y x64 en Visual Studio 2010?

Publicado el 2024-11-15
Navegar:123

Why does floating-point arithmetic differ between x86 and x64 in Visual Studio 2010?

Discrepancia aritmética de punto flotante entre x86 y x64

En Visual Studio 2010, una diferencia notable en la aritmética de punto flotante entre las compilaciones x86 y x64 Surge al comparar los valores de ciertas expresiones. Esta disparidad se manifiesta en el siguiente código:

float a = 50.0f;
float b = 65.0f;
float c = 1.3f;
float d = a * c;
bool bLarger1 = d 

Las arquitecturas x86 y x64 manejan la segunda expresión, bLarger2, de manera diferente. En la compilación x86, bLarger2 se evalúa como verdadero, mientras que en la compilación x64, se evalúa como falso. Esta disparidad tiene su origen en el cálculo de la expresión (a * c) en operaciones de punto flotante.

Orígenes de la disparidad

La raíz de la discrepancia radica en las diferentes unidades de punto flotante utilizadas por las dos arquitecturas: x87 para x86 y SSE para x64. La diferencia fundamental entre las dos unidades es su precisión. La unidad x87 emplea una precisión superior a la simple (generalmente precisión doble) de forma predeterminada, mientras que la unidad SSE opera exclusivamente con precisión simple.

Remediar la discrepancia

Para resolver el discrepancia, la precisión de la unidad x87 se puede configurar manualmente para que coincida con la de la unidad SSE. Esto se puede lograr en código de 32 bits ejecutando lo siguiente:

_controlfp(_PC_24, _MCW_PC);

Al establecer la precisión en precisión simple, la evaluación de (a * c) en la expresión bLarger2 se alineará con la de la compilación x64, lo que dará como resultado que bLarger1 y bLarger2 se establezcan en falso.

Conclusión

La diferencia en aritmética de punto flotante entre Las compilaciones x86 y x64 surgen de los distintos niveles de precisión de las unidades de punto flotante x87 y SSE. Al controlar manualmente la precisión de la unidad x87 para que coincida con la de la unidad SSE, se puede eliminar la discrepancia, lo que garantiza una evaluación coherente de las expresiones en ambas arquitecturas.

Último tutorial Más>

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