/fpcvt
(Compatibilité de la conversion à virgule flottante en entier)
Spécifie la façon dont le compilateur traite les conversions à virgule flottante en types entiers.
Syntaxe
/fpcvt:IA
/fpcvt:BC
Arguments
/fpcvt:IA
L’option /fpcvt:IA
indique au compilateur de convertir des valeurs à virgule flottante en entiers afin que les résultats soient compatibles avec les instructions de conversion Intel AVX-512. Ce comportement est le comportement habituel dans Visual Studio 2019 pour les cibles x86.
/fpcvt:BC
L’option /fpcvt:BC
indique au compilateur de convertir des valeurs à virgule flottante en entiers non signés afin que les résultats soient compatibles avec les compilateurs Visual Studio 2017 et antérieurs. Ce comportement est la valeur par défaut dans Visual Studio 2022.
Notes
Dans Visual Studio 2019 version 16.8 et versions ultérieures, l’option du /fpcvt
compilateur peut être utilisée pour contrôler les résultats des conversions à virgule flottante en nombres entiers. L’option /fpcvt:BC
spécifie le comportement par défaut de Visual Studio 2022, qui est identique au comportement de Visual Studio 2017 et des versions antérieures. L’option /fpcvt:IA
spécifie le comportement compatible avec le comportement d’instruction de conversion AVX-512 d’Intel Architecture (IA). Cette option peut être utilisée avec des cibles x86 ou x64 bits 32 bits ou 64 bits, et elle s’applique si /arch:AVX512
elle est spécifiée ou non.
Pour Visual Studio 2019, le comportement par défaut pour les cibles x64 est cohérent avec /fpcvt:BC
, sauf /arch:AVX512
indication contraire. En règle générale, le comportement des cibles x86 est cohérent avec /fpcvt:IA
, sauf sous /arch:IA32
, /arch:SSE
ou parfois où le résultat d’un appel de fonction est directement converti en entier non signé. L’utilisation des /fpcvt
remplacements par défaut permet de gérer toutes les conversions de manière cohérente sur l’une ou l’autre cible. Le comportement des conversions pour les cibles ARM et ARM64 n’est pas cohérent avec l’une ou l’autre /fpcvt:BC
./fpcvt:IA
C++ standard spécifie que si une valeur à virgule flottante tronquée est exactement représentée dans un type entier, elle doit avoir cette valeur lorsqu’elle est convertie en ce type. Sinon, tout comportement est autorisé. Les deux /fpcvt
options sont conformes à la norme C++. La seule différence réside dans les valeurs retournées pour les valeurs sources non valides.
L’option /fpcvt:IA
entraîne une conversion non valide pour retourner une valeur sentinelle unique, qui est la valeur de destination la plus éloignée de zéro. Pour la conversion en types signés, la sentinelle est la valeur minimale de ce type. Les types non signés utilisent la valeur maximale. Les opérations à virgule flottante peuvent retourner une valeur NaN (Not-a-Number) pour indiquer une opération non valide. Cet indicateur n’est pas une option pour la conversion en types entiers, qui n’ont pas de valeurs NaN. La sentinelle est utilisée comme proxy pour une valeur NaN, bien qu’elle puisse également être le résultat d’une conversion valide.
L’option /fpcvt:BC
rend également la conversion en types signés retourner la valeur minimale possible lorsque la source n’est pas valide. Toutefois, la conversion en types entiers non signés est basée sur la conversion en long long
. Pour convertir une valeur unsigned int
en , le compilateur le convertit d’abord en type long long
. Le compilateur tronque ensuite le résultat à 32 bits. Pour convertir une valeur unsigned long long
en valeurs sources valides trop élevées pour un long long
cas spécial. Toutes les autres valeurs sont d’abord converties en long long
puis recastées en unsigned long long
.
Les /fpcvt
options sont nouvelles dans Visual Studio 2019 version 16.8. Si vous spécifiez plusieurs /fpcvt
options sur la ligne de commande, l’option ultérieure est prioritaire et le compilateur génère un avertissement.
Fonctions intrinsèques pour les conversions
Vous pouvez spécifier le comportement d’une conversion spécifique indépendamment de l’option /fpcvt
, qui s’applique globalement. Le compilateur fournit des fonctions de conversion sentinel intrinsèques pour les conversions compatibles avec /fpcvt:IA
. Pour plus d’informations, consultez les fonctions de conversion Sentinel. Le compilateur fournit également des fonctions de conversion de saturation compatibles avec les conversions sur les architectures cibles ARM ou ARM64. Pour plus d’informations, consultez les fonctions de conversion de saturation.
Le compilateur prend également en charge les fonctions de conversion intrinsèques qui s’exécutent aussi rapidement que possible pour les conversions valides. Ces fonctions peuvent générer n’importe quelle valeur ou lever une exception pour une conversion non valide. Les résultats dépendent de la plateforme cible, des options du compilateur et du contexte. Ils sont utiles pour gérer les valeurs qui ont déjà été vérifiées par plage, ou les valeurs générées d’une manière qui ne peut pas entraîner une conversion non valide. Pour plus d’informations, consultez fonctions de conversion rapide.
Pour définir cette option du compilateur dans l'environnement de développement Visual Studio
Ouvrez la boîte de dialogue Pages de propriété du projet. Pour plus d’informations, consultez Définir le compilateur C++ et les propriétés de build dans Visual Studio.
Sélectionnez la page de propriétés Propriétés de configuration>C/C++>Ligne de commande.
Modifiez la propriété Options supplémentaires pour ajouter
/fpcvt:IA
ou/fpcvt:BC
. Sélectionnez OK pour enregistrer vos modifications.
Pour définir cette option du compilateur par programmation
- Consultez AdditionalOptions.
Voir aussi
Options du compilateur MSVC
Syntaxe de ligne de commande du compilateur MSVC
Fonctions de conversion rapide
Fonctions de conversion de saturation
Fonctions de conversion Sentinel