Aracılığıyla paylaş


/fp (Kayan Nokta Davranışını Belirt)

Bir kaynak kodu dosyasında kayan nokta türü davranışını belirtir.

/fp:[precise | except[-] | fast | strict ]

Bayraklar

  • precise
    Varsayılan.

    Kayan nokta hesaplamalarının duyarlığını değiştirebilen iyileştirmeleri devre dışı bırakarak eşitlik ve eşitsizlik için kayan nokta testlerinin tutarlılığını artırır. (Katı ANSI uyumluluğu için belirli düzeyde duyarlığın korunması gereklidir.) Varsayılan olarak, x 86 mimarilerinin kodunda kod derleyici, yardımcı işlemcinin 80-bit kayıtlarını kullanarak kayan nokta hesaplamalarının ara sonuçlarını saklar.Bu program hızını artırır ve program boyutunu küçültür.Ancak, hesaplama, bellekte 80 bitten düşük olarak temsil edilen kayan nokta veri türleri içerdiği için, ekstra bit duyarlığını (80 bit eksi daha küçük bir kayan nokta türündeki bit sayısı) uzun bir hesaplama boyunca taşımak tutarsız sonuçlar verebilir.

    x86 işlemcilerde, /fp:precise ile, derleyici float türündeki değişkenleri atamalar ve yayınlar için ve parametreler bir işleve geçirildiğinde doğru duyarlığa yuvarlar.Bu yuvarlama, verinin, kendi türünün kapasitesinden büyük bir anlam taşımadığından emin olunmasını sağlar. /fp:precise ile derlenmiş bir program, /fp:precise olmadan derlenmiş bir programdan daha yavaş ve büyük olabilir./fp:precise yapı içlerini devre dışı bırakır, bunun yerine standart çalışma zamanı kitaplığı yordamları kullanılır.Daha fazla bilgi için bkz. /Oi (İç İşlevler Üret).

    Aşağıdaki kayan nokta davranışı /fp:precise ile etkinleştirilir:

    • Kısaltmalar — yani, birden çok işlemin yerini almak üzere, sonda yalnızca bir yuvarlamaya sahip bileşik bir işlem kullanma.

    • Özel değerler için geçersiz olan ifade iyileştirmelerine (NaN, + sonsuz, - sonsuz + 0, - 0) izin verilmez.x-x => 0, x*0 => 0, x-0 => x, x+0 => x ve 0-x => -x iyileştirmeleri çeşitli nedenlerle geçersizdir. (Bkz. IEEE 754 ve C99 standardı.)

    • Derleyici NaN içeren karşılaştırmaları doğru olarak işler.Örneğin, x NaN ise ve NaN içeren sıralı karşılaştırmalar özel bir durum oluşturursa x != x doğru olarak değerlendirilir.

    • İfade değerinin hesaplanması, şu özel durumla, C99 FLT_EVAL_METHOD=2'yi izler: x86 işlemciler için programlama yaptığınızda, FPU 53-bit duyarlığa ayarlanmış olduğu için bu uzun çift duyarlık olarak değerlendirilir.

    • Tam olarak 1.0 ile çarpım diğer bir faktörün kullanımı olarak dönüştürüldü.x*y*1.0, x*y olarak dönüştürülür.Benzer şekilde, x*1.0*y, x*y olarak dönüştürülür.

    • Tam olarak 1.0 ile bölme, bölünen sayının kullanımı olarak dönüştürüldü.x*y/1.0, x*y olarak dönüştürülür.Benzer şekilde, x/1.0*yx*yolarak dönüştürülür.

    fenv_access AÇIK olduğunda /fp:precise kullanmak, kayan nokta ifadelerinin derleme zamanı değerlendirmeleri gibi iyileştirmeleri devre dışı bırakır.Örneğin, yuvarlama modunu değiştirmek için _control87, _controlfp, __control87_2 kullanırsanız ve derleyici bir kayan nokta hesaplaması gerçekleştirirse, belirttiğiniz yuvarlama modu fenv_access AÇIK olmadığı sürece geçerli olmaz.

    /fp:precise, /Op derleyici seçeneğinin yerini alır.

  • fast
    Kayan nokta işlemlerini iyileştirmek için kuralları esneterek çoğu durumda en hızlı kodu oluşturur.Bu, derleyicinin, doğruluk ve kesinlikten ödün vererek kayan nokta kodunun hızını iyileştirmesini sağlar./fp:fast belirtildiğinde, derleyici; atama deyimleri, tür atamaları veya işlev çağrılarında doğru şekilde yuvarlama yapamayabilir ve ara ifadelerin yuvarlamasını gerçekleştiremeyebilir.Derleyici, sonlu duyarlık sonuçları üzerindeki etkiden bağımsız olarak, işlemlerini yeniden sıralayabilir veya cebirsel dönüşümleri gerçekleştirebilir (ör. ilişkilendirilebilir ve dağıtılabilir kuralları izleyerek).Derleyici; C++ türü promosyon kurallarını izlemek yerine işlemleri ve işleçleri tek duyarlıklı hale getirebilir.Kayan noktaya özgü kısaltma iyileştirmeleri her zaman etkindir (fp_contract AÇIK).Kayan nokta özel durumları ve FPU ortam erişimi devre dışı bırakılır (/fp:except- kullanılmış olur ve fenv_access KAPALI).

    /fp:fast, /fp:strict veya /fp:precise ile kullanılamaz.Komut satırında belirtilen en son seçenek kullanılır.Hem /fp:fast hem de /fp:except belirtmek, derleyici hatası oluşturur.

    /Za, /Ze (Dil Uzantılarını Devre Dışı Bırak) (ANSI uyumluluğu) ve /fp:fast belirtmek, beklenmedik davranışa neden olabilir.Örneğin, tek duyarlıklı kayan nokta işlemleri tek duyarlıklı olarak yuvarlanmayabilir.

  • except[-]
    Güvenilir kayan nokta özel durumu modeli.Özel durumlar, tetiklendikten hemen sonra oluşur.Varsayılan olarak, bu değer kapalıdır.Seçeneğe eksi işareti eklemek, onu açıkça devre dışı bırakır.

  • strict
    En katı kayan nokta modeli./fp:strict, fp_contract öğesinin KAPALI, fenv_access öğesinin ise AÇIK olmasına neden olur./fp:except kastedilir ve açık bir biçimde /fp:except- belirterek devre dışı bırakılabilir./fp:except- ile kullanıldığında, /fp:strict, özel durum olaylarını yoksayarak katı kayan nokta semantiklerini uygular.

Notlar

Aynı derlemede birden fazla /fp seçeneği belirtilebilir.

Kayan nokta davranışını işleve göre kontrol etmek için bkz. float_control pragma.Bu, /fp derleyici ayarını geçersiz kılar.İyi bir mühendislik davranışı olarak, yerel kayan nokta davranışını kaydedip geri yüklemenizi öneririz:

#pragma float_control(precise, on, push)
// Code that uses /fp:precise mode
#pragma float_control(pop)

/fp:strict, /fp:except (ve ona karşılık gelen pragmalar) ve fp_contract pragma ile ilişkili kayan nokta iyileştirmelerinin çoğu makineye bağlıdır./fp:strict ve /fp:except, /clr ile uyumlu değildir.

/fp:precise, bir uygulamanın kayan nokta gereksinimlerinden çoğunu gidermelidir./fp:except ve /fp:strict kullanabilirsiniz, fakat performans biraz düşebilir.Önceliğiniz performans ise, /fp:fast kullanıp kullanamayacağınızı düşünmenizi öneririz.

/fp:strict, /fp:fast ve /fp:precise duyarlık (doğruluk) modlarıdır.Aynı anda yalnızca biri kullanımda olabilir./fp:strict ve /fp:preciseaynı anda belirtilirse, derleyici en son işlediğini kullanır.Hem /fp:strict hem de /fp:fast belirtilemez.

Daha fazla bilgi için bkz: Microsoft Visual C++ Floating-Point İyileştirme.

Bu derleyici seçeneğini Visual Studio geliştirme ortamında ayarlamak için

  1. Projenin Özellik Sayfaları iletişim kutusunu açın.Ayrıntılar için bkz. Nasıl Yapılır: Proje Özellik Sayfalarını Açma.

  2. Yapılandırma Özellikleri düğümünü genişletin.

  3. C/C++ düğümünü genişletin.

  4. Kod Oluşturma özellik sayfasını seçin.

  5. Kayan Nokta Modeli özelliğini değiştirin.

Bu derleyici seçeneğini program üzerinden ayarlamak için

Ayrıca bkz.

Başvuru

Derleyici Seçenekleri

Derleyici Seçeneklerini Ayarlama

Diğer Kaynaklar

Microsoft Visual C++ Floating Point İyileştirme