fp_contract
pragma
Détermine si la contraction à virgule flottante a lieu. Une contraction à virgule flottante est une instruction telle que Fused-Multiply-Add (FMA) qui combine deux opérations à virgule flottante distinctes en une seule instruction. L’utilisation de ces instructions peut affecter la précision à virgule flottante, car au lieu d’arrondir après chaque opération, le processeur ne peut arrondir qu’une seule fois après les deux opérations.
Syntaxe
#pragma fp_contract (
{on
|off
})
Notes
Lorsque vous utilisez les options de compilateur par défaut, fp_contract
c’est-à-dire off
, qui indique au compilateur de conserver des instructions à virgule flottante individuelles. Définissez cette option fp_contract
pour on
utiliser des instructions de contraction à virgule flottante si possible. Ce comportement est nouveau dans Visual Studio 2022 version 17.0. Dans les versions précédentes du compilateur, fp_contract
la valeur par défaut est on
.
Lorsque vous utilisez les options du compilateur par défaut, fp_contract
est on
. Ce paramètre indique au compilateur d’utiliser des instructions de contraction à virgule flottante si possible. Définissez cette option fp_contract
pour off
conserver des instructions à virgule flottante individuelles. Dans Visual Studio 2022 version 17.0 et versions ultérieures, fp_contract
la off
valeur par défaut est .
Pour plus d’informations sur le comportement à virgule flottante, consultez /fp
(Spécifier le comportement à virgule flottante).
Voici d’autres directives à virgule pragma flottante :
Exemple
L’option /fp:fast
du compilateur active les contractions par défaut, mais la #pragma fp_contract (off)
directive de cet exemple les désactive. Le code généré à partir de cet exemple n’utilise pas d’instruction d’ajout de multiplication fusionnée, même lorsqu’il est disponible sur le processeur cible. Si vous commentez #pragma fp_contract (off)
, le code généré peut utiliser une instruction fusionnée-multiplie-add si elle est disponible.
// pragma_directive_fp_contract.cpp
// On x86 and x64 compile with: /O2 /fp:fast /arch:AVX2
#include <stdio.h>
// remove the following line to enable FP contractions
#pragma fp_contract (off)
int main() {
double z, b, t;
for (int i = 0; i < 10; i++) {
b = i * 5.5;
t = i * 56.025;
z = t * i + b;
printf("out = %.15e\n", z);
}
}
out = 0.000000000000000e+00
out = 6.152500000000000e+01
out = 2.351000000000000e+02
out = 5.207249999999999e+02
out = 9.184000000000000e+02
out = 1.428125000000000e+03
out = 2.049900000000000e+03
out = 2.783725000000000e+03
out = 3.629600000000000e+03
out = 4.587525000000000e+03
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour