Floating-point environment (since C++11)
L'environnement en virgule flottante est l'ensemble des indicateurs d'état et des modes de contrôle en virgule flottante pris en charge par l'implémentation. Il est local au thread. Chaque thread hérite de l'état initial de son environnement en virgule flottante depuis le thread parent. Les opérations en virgule flottante modifient les indicateurs d'état en virgule flottante pour indiquer des résultats anormaux ou des informations auxiliaires. L'état des modes de contrôle en virgule flottante affecte les résultats de certaines opérations en virgule flottante.
L'accès et la modification de l'environnement en virgule flottante n'ont de sens que lorsque
#pragma STDC FENV_ACCESS
est pris en charge et défini sur
ON
. Sinon, l'implémentation est libre de supposer que les modes de contrôle en virgule flottante sont toujours ceux par défaut et que les indicateurs d'état en virgule flottante ne sont jamais testés ou modifiés. En pratique, peu de compilateurs actuels, tels que HP aCC, Oracle Studio ou IBM XL, prennent en charge explicitement le
#pragma
, mais la plupart des compilateurs permettent néanmoins un accès significatif à l'environnement en virgule flottante.
Table des matières |
Types
|
Défini dans l'en-tête
<cfenv>
|
|
|
fenv_t
(C++11)
|
le type représentant l'environnement complet en virgule flottante
(typedef) |
|
fexcept_t
(C++11)
|
le type représentant collectivement tous les indicateurs d'état en virgule flottante
(typedef) |
Fonctions
|
(C++11)
|
efface les indicateurs d'état en virgule flottante spécifiés
(fonction) |
|
(C++11)
|
détermine quels indicateurs d'état en virgule flottante spécifiés sont activés
(fonction) |
|
(C++11)
|
déclenche les exceptions en virgule flottante spécifiées
(fonction) |
|
(C++11)
(C++11)
|
copie l'état des indicateurs d'état en virgule flottante spécifiés depuis ou vers l'environnement en virgule flottante
(fonction) |
|
(C++11)
(C++11)
|
obtient ou définit la direction d'arrondi
(fonction) |
|
(C++11)
|
sauvegarde ou restaure l'environnement en virgule flottante actuel
(fonction) |
|
(C++11)
|
sauvegarde l'environnement, efface tous les indicateurs d'état et ignore toutes les erreurs futures
(fonction) |
|
(C++11)
|
restaure l'environnement en virgule flottante et déclenche les exceptions précédemment levées
(fonction) |
Macros
|
exceptions en virgule flottante
(constante macro) |
|
|
direction d'arrondi en virgule flottante
(constante macro) |
|
|
(C++11)
|
environnement par défaut en virgule flottante
(constante macro) |
Notes
Les exceptions en virgule flottante ne sont pas liées aux exceptions C++. Lorsqu'une opération en virgule flottante déclenche une exception en virgule flottante, l'état de l'environnement de virgule flottante change, ce qui peut être vérifié avec std::fetestexcept , mais l'exécution d'un programme C++ sur la plupart des implémentations se poursuit sans interruption.
Il existe des extensions de compilateur qui peuvent être utilisées pour générer automatiquement des exceptions C++ chaque fois qu'une exception de virgule flottante est déclenchée :
-
Fonction GNU libc
feenableexcept()active le piégeage des exceptions en virgule flottante, ce qui génère le signalSIGFPE. Si l'option du compilateur-fnon-call-exceptionsa été utilisée, le gestionnaire de ce signal peut lever une exception C++ définie par l'utilisateur. -
Fonction MSVC
_control87()active le piégeage des exceptions en virgule flottante, ce qui génère une exception matérielle, qui peut être convertie en exceptions C++ avec_set_se_translator.
Voir aussi
|
Documentation C
pour
Environnement de virgule flottante
|