Maison > développement back-end > C++ > Comment puis-je modifier efficacement les modes d'arrondi à virgule flottante IEEE 754 dans les assemblages C et x86 ?

Comment puis-je modifier efficacement les modes d'arrondi à virgule flottante IEEE 754 dans les assemblages C et x86 ?

Barbara Streisand
Libérer: 2024-11-29 14:45:12
original
222 Les gens l'ont consulté

How Can I Efficiently Change IEEE 754 Floating Point Rounding Modes in C and x86 Assembly?

Manipulation du mode d'arrondi à virgule flottante IEEE 754

L'arithmétique à virgule flottante implique souvent l'arrondi des nombres pour se rapprocher du vrai résultat mathématique. La norme IEEE 754 définit plusieurs modes d'arrondi qui déterminent la manière dont les nombres à virgule flottante sont arrondis. Cet article explore des méthodes efficaces pour modifier le mode d'arrondi dans un environnement d'assemblage portable C ou x86.

Solution C standard

Pour le code C portable, la solution consiste à utiliser le Fonction C99 fesetround(), qui permet de définir le mode d'arrondi. Cependant, n'oubliez pas de restaurer le mode d'arrondi d'origine après l'avoir modifié.

#include <fenv.h>
#pragma STDC FENV_ACCESS ON

int main() {
    int originalRounding = fegetround();
    fesetround(FE_TOWARDZERO);
    // Perform operations

    fesetround(originalRounding);
    return 0;
}
Copier après la connexion

Solution d'assemblage x86

Si vous travaillez sur des plates-formes plus anciennes sans support C99 , vous devrez peut-être utiliser l'assembly x86 pour manipuler le mode d'arrondi. Cela implique de définir le mode d'arrondi à la fois dans l'unité x87 (à l'aide de l'instruction fldcw) et dans SSE (à l'aide de l'instruction ldmxcsr).

Solution spécifique à MSVC

Pour MS Visual C (MSVC), il existe une alternative à l'assembly. Vous pouvez utiliser la fonction non standard _controlfp() pour modifier le mode d'arrondi.

unsigned int originalRounding = _controlfp(0, 0);
_controlfp(_RC_CHOP, _MCW_RC);
// Do some operations

_controlfp(originalRounding, _MCW_RC);
Copier après la connexion

Constantes du mode d'arrondi

Pour spécifier le mode d'arrondi, vous devez utilisez la constante macro appropriée. Voici un résumé des noms standard C et MSVC pour les modes d'arrondi :

Rounding Mode C MSVC
Nearest FE_TONEAREST _RC_NEAR
Toward Zero FE_TOWARDZERO _RC_CHOP
Positive Infinity FE_UPWARD _RC_UP
Negative Infinity FE_DOWNWARD _RC_DOWN

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal