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 nokta ortam bayrak testlerini ve mod değişikliklerini değiştirebilecek iyileştirmeleri devre dışı bırakır (on) veya etkinleştirir (off).
Sözdizimi
#pragma fenv_access ({on|off})
Açıklamalar
Varsayılan olarak, fenv_access şeklindedir off. Derleyici, kodunuzun kayan nokta ortamına erişmediği veya bu ortamı işlemediği varsayılır. Ortam erişimi gerekli değilse, derleyici kayan nokta kodunuzu iyileştirmek için daha fazlasını yapabilir.
Kodunuz kayan nokta durum bayraklarını, özel durumları sınarsa veya denetim modu bayraklarını ayarlarsa etkinleştirin fenv_access . Derleyici kayan nokta iyileştirmelerini devre dışı bırakır, böylece kodunuz kayan nokta ortamına tutarlı bir şekilde erişebilir.
/fp:strict Komut satırı seçeneği otomatik olarak etkinleştirirfenv_access. Bu ve diğer kayan nokta davranışı hakkında daha fazla bilgi için bkz . /fp (Kayan Nokta Davranışını Belirtme).
öğesini diğer kayan nokta ayarlarıyla birlikte kullanmanın fenv_accesspragma yolları üzerinde kısıtlamalar vardır:
Kesin semantikler etkinleştirilmediği sürece etkinleştiremezsiniz
fenv_access. Hassas semantik, tarafından veyafloat_controlpragmaveya derleyici seçenekleri kullanılarak/fp:precise/fp:strictetkinleştirilebilir. Başka bir kayan nokta komut satırı seçeneği belirtilmezse derleyici varsayılan olarak/fp:preciseayarlanır.Ayarlandığında hassas semantiği
float_controldevre dışı bırakmak için kullanamazsınızfenv_access(on).
yönergesi fenv_access(on) , kayan nokta işlemlerini birleştiren makine yönergeleri olan kayan noktalı kasılmaların oluşturulmasını devre dışı bırakır.
fenv_access(off) kasılmalar için önceki davranışı geri yükler. Bu davranış Visual Studio 2022'de yenidir. Önceki derleyici sürümleri altında fenv_access(on)varsayılan olarak sözleşmeler oluşturabilir. Kayan noktalı kasılmalar hakkında daha fazla bilgi için bkz /fp:contract. .
Tabi olan iyileştirme türleri şunlardır fenv_access :
Genel ortak alt ifade ortadan kaldırma
Kod hareketi
Sabit katlama
Diğer kayan nokta pragma yönergeleri şunlardır:
Örnekler
Bu örnek, kayan nokta denetim yazmaç değerini 24 bit duyarlık için ayarlı olarak ayarlar fenv_accesson :
// 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
Önceki örnekten açıklama satırı #pragma fenv_access (on) yaparsanız çıkış farklıdır. Bunun nedeni, derleyicinin denetim modunu kullanmayan derleme zamanı değerlendirmesi yapıyor olmasıdır.
// 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
Ayrıca bkz.
Pragma yönergeleri ve __pragma ve _Pragma anahtar sözcükleri