Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Kayan noktalı daralma olup olmadığını belirler. Kayan noktalı kasılma, iki ayrı kayan nokta işlemlerini tek bir yönergede birleştiren Fused-Multiply-Add (FMA) gibi bir yönergedir. Bu yönergelerin kullanılması kayan nokta duyarlığı etkileyebilir çünkü her işlemden sonra yuvarlama yerine işlemci her iki işlemden sonra yalnızca bir kez yuvarlayabilir.
Sözdizimi
#pragma fp_contract ({on|off})
Açıklamalar
Varsayılan derleyici seçeneklerini kullandığınızda, fp_contract derleyiciye tek tek kayan nokta yönergelerini korumasını söyleyen değeridir off.
fp_contract Mümkün olduğunda kayan noktalı daralma yönergelerini kullanmak için olarak ayarlayınon. Bu davranış Visual Studio 2022 sürüm 17.0'da yenidir. Önceki derleyici sürümlerinde fp_contract varsayılan olarak onolarak gösterilir.
Varsayılan derleyici seçeneklerini kullandığınızda, fp_contract şeklindedir on. Bu ayar derleyiciye mümkün olduğunda kayan noktalı daralma yönergelerini kullanmasını söyler.
fp_contract Tek tek kayan nokta yönergelerini korumak için olarak ayarlayınoff. Visual Studio 2022 sürüm 17.0 ve sonraki sürümlerde varsayılan fp_contract olarak olur off.
Kayan nokta davranışı hakkında daha fazla bilgi için bkz /fp . (Kayan nokta davranışını belirtme).
Diğer kayan nokta pragma yönergeleri şunlardır:
Örnek
Derleyici /fp:fast seçeneği, sözleşmeleri varsayılan olarak etkinleştirir, ancak bu örnekteki #pragma fp_contract (off) yönerge bunları kapatır. Bu örnekten oluşturulan kod, hedef işlemcide kullanılabilir olsa bile bir fused-multiply-add yönergesi kullanmaz. açıklama satırı #pragma fp_contract (off)yaparsanız, oluşturulan kod varsa fused-multiply-add yönergesi kullanabilir.
// 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
Ayrıca bkz.
Pragma yönergeleri ve __pragma ve _Pragma anahtar sözcükleri