Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Zakáže (on) nebo povolí (off) optimalizace, které by mohly změnit testy a změny režimu prostředí s plovoucí desetinou čárkou.
Syntaxe
#pragma fenv_access ({on|off})
Poznámky
Ve výchozím nastavení fenv_access je off. Kompilátor předpokládá, že váš kód nemá přístup k prostředí s plovoucí desetinou čárkou nebo s ním manipuluje. Pokud přístup k prostředí není povinný, kompilátor může provést větší optimalizaci kódu s plovoucí desetinou čárkou.
Povolte fenv_access , pokud kód testuje příznaky stavu s plovoucí desetinou čárkou, výjimky nebo nastaví příznaky režimu řízení. Kompilátor zakáže optimalizace s plovoucí desetinou čárkou, aby váš kód mohl konzistentně přistupovat k prostředí s plovoucí desetinou čárkou.
Možnost příkazového /fp:strict řádku se automaticky povolí fenv_access. Další informace o tomto a dalším chování s plovoucí desetinou čárkou najdete v tématu /fp (určení chování s plovoucí desetinou čárkou).
Existují omezení způsobů použití fenv_accesspragma kombinace s jinými nastaveními s plovoucí desetinou čárkou:
Pokud není povolená přesná sémantika, nemůžete ji povolit
fenv_access. Přesnou sémantiku může povolit buďfloat_controlpragmamožnost , nebo pomocí možností kompilátoru/fp:precise/fp:strict. Kompilátor se ve výchozím nastavení nastaví,/fp:precisepokud není zadána žádná jiná možnost příkazového řádku s plovoucí desetinou čárkou.Nemůžete použít
float_controlk zakázání přesné sémantiky přifenv_access(on)nastavení.
Direktiva fenv_access(on) zakazuje generování kontraktů s plovoucí desetinou čárkou, strojové instrukce, které kombinují operace s plovoucí desetinou čárkou.
fenv_access(off) obnoví předchozí chování pro kontrakce. Toto chování je v sadě Visual Studio 2022 nové. Předchozí verze kompilátoru můžou ve výchozím nastavení generovat kontrakty v části fenv_access(on). Další informace o kontraktech s plovoucí desetinou čárkou naleznete v tématu /fp:contract.
Druhy optimalizací, které jsou předmětem fenv_access :
Globální běžná eliminace dílčího výrazu
Pohyb kódu
Skládací konstanta
Mezi další direktivy s plovoucí desetinou čárkou pragma patří:
Příklady
Tento příklad nastaví fenv_access nastavení on registru ovládacího prvku s plovoucí desetinnou čárkou pro 24bitovou přesnost:
// pragma_directive_fenv_access_x86.cpp
// compile with: /O2 /arch:IA32
// processor: x86
#include <stdio.h>
#include <float.h>
#include <errno.h>
#pragma fenv_access (on)
int main() {
double z, b = 0.1, t = 0.1;
unsigned int currentControl;
errno_t err;
err = _controlfp_s(¤tControl, _PC_24, _MCW_PC);
if (err != 0) {
printf_s("The function _controlfp_s failed!\n");
return -1;
}
z = b * t;
printf_s ("out=%.15e\n",z);
}
out=9.999999776482582e-03
Pokud zakomentujete #pragma fenv_access (on) z předchozí ukázky, výstup se liší. Je to proto, že kompilátor vyhodnotuje dobu kompilace, která nepoužívá řídicí režim.
// pragma_directive_fenv_access_2.cpp
// compile with: /O2 /arch:IA32
#include <stdio.h>
#include <float.h>
int main() {
double z, b = 0.1, t = 0.1;
unsigned int currentControl;
errno_t err;
err = _controlfp_s(¤tControl, _PC_24, _MCW_PC);
if (err != 0) {
printf_s("The function _controlfp_s failed!\n");
return -1;
}
z = b * t;
printf_s ("out=%.15e\n",z);
}
out=1.000000000000000e-02