Partager via


/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:SSEou 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 inten , 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 longen 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

  1. 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.

  2. Sélectionnez la page de propriétés Propriétés de configuration>C/C++>Ligne de commande.

  3. 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

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