"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que a aritmética de ponto flutuante difere entre x86 e x64 no Visual Studio 2010?

Por que a aritmética de ponto flutuante difere entre x86 e x64 no Visual Studio 2010?

Publicado em 15/11/2024
Navegar:153

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

Discrepância aritmética de ponto flutuante entre x86 e x64

No Visual Studio 2010, uma diferença notável na aritmética de ponto flutuante entre compilações x86 e x64 surge ao comparar os valores de certas expressões. Essa disparidade se manifesta no seguinte código:

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

As arquiteturas x86 e x64 lidam com a segunda expressão, bLarger2, de maneira diferente. Na compilação x86, bLarger2 é avaliado como verdadeiro, enquanto na compilação x64 é avaliado como falso. Essa disparidade está enraizada no cálculo da expressão (a * c) em operações de ponto flutuante.

Origens da disparidade

A raiz da discrepância está nas diferentes unidades de ponto flutuante utilizadas pelas duas arquiteturas: x87 para x86 e SSE para x64. A diferença fundamental entre as duas unidades é a sua precisão. A unidade x87 emprega precisão superior à simples (normalmente precisão dupla) por padrão, enquanto a unidade SSE opera exclusivamente com precisão simples. discrepância, a precisão da unidade x87 pode ser configurada manualmente para corresponder à da unidade SSE. Isso pode ser alcançado em código de 32 bits executando o seguinte:

_controlfp(_PC_24, _MCW_PC);Ao definir a precisão para precisão única, a avaliação de (a * c) em a expressão bLarger2 se alinhará com a da construção x64, resultando em bLarger1 e bLarger2 sendo definidos como false.

Conclusão
_controlfp(_PC_24, _MCW_PC);

A diferença na aritmética de ponto flutuante entre compilações x86 e x64 decorre dos níveis de precisão distintos das unidades de ponto flutuante x87 e SSE. Ao controlar manualmente a precisão da unidade x87 para corresponder à da unidade SSE, a discrepância pode ser eliminada, garantindo uma avaliação consistente das expressões em ambas as arquiteturas.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3