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 = dAs 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.
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