Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Meghatározza, hogy a lebegőpontos összehúzódás végbemegy-e. A lebegőpontos összevonás olyan utasítás, mint például a Fused-Multiply-Add (FMA), amely két különálló lebegőpontos műveletet egyesít egyetlen utasítással. Ezeknek az utasításoknak a használata befolyásolhatja a lebegőpontos pontosságot, mivel az egyes műveletek utáni kerekítés helyett a processzor csak egyszer kerekítheti mindkét művelet után.
Szintaxis
#pragma fp_contract ({on|off})
Megjegyzések
Ha az alapértelmezett fordítóbeállításokat használja, fp_contractoff, amely arra utasítja a fordítót, hogy őrizze meg az egyes lebegőpontos utasításokat. Ha lehetséges, állítsa fp_contracton lebegőpontos összehúzó utasítások használatára. Ez a viselkedés a Visual Studio 2022 17.0-s verziójában új. A korábbi fordítóverziókban a fp_contract alapértelmezés szerint on.
Az alapértelmezett fordítóbeállítások használatakor fp_contracton. Ez a beállítás arra utasítja a fordítót, hogy ha lehetséges, használjon lebegőpontos összehúzó utasításokat. Állítsa fp_contractoff az egyes lebegőpontos utasítások megőrzéséhez. A Visual Studio 2022 17.0-s és újabb verzióiban a fp_contract alapértelmezés szerint off.
További információ a lebegőpontos viselkedésről: /fp (Lebegőpontos viselkedés megadása).
Egyéb lebegőpontos pragma irányelvek a következők:
Példa
A /fp:fast fordítóbeállítás alapértelmezés szerint engedélyezi a kontrakciókat, de a példában szereplő #pragma fp_contract (off) irányelv kikapcsolja őket. Az ebből a mintából létrehozott kód nem fog összeolvasztott szorzás-hozzáadás utasítást használni, még akkor sem, ha az elérhető a célprocesszoron. Ha #pragma fp_contract (off)megjegyzést fűz hozzá, a létrehozott kód egy összeszorzott-szorzásos-hozzáadási utasítást használhat, ha elérhető.
// 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
Lásd még:
Pragma irányelvei, valamint a __pragma és _Pragma kulcsszavak