2016-10-21 28 views
9

GCC'de, kayan nokta hesaplamalarını hızlandırmak için -ffast-math'u etkinleştiririz. Biz NaN ve Enf kayan nokta değerlerinin uygun davranış güvenmek gibi, biz de -fno-finite-math-only açmak, böylece değerler almasını optimizasyon MSVC için NaN/İhlalMSCC, GCC'nin -fno-sonlu-matematiğine eşdeğerdir?

, -ffast-math için "eşdeğer" görünüşte /fp:fast olduğunu değildir. Bununla birlikte, GCC'nin -ffast-math gibi, also includes gibi, Nan/Inf bulunmadığını varsayan optimizasyonlar. (Kritik olarak, std :: isnan() gibi testlerin "doğru" sonuçlar vermesi garanti edilmez.)

/fp:fast optimizasyonlarının çoğundan yararlanmanızı sağlayan MSVC C++ derleme seçeneği var mı? ama yine de NaN ve Inf değerlerini "düzgün" olarak değerlendiriyor? (Ya da en azından, garanti olduğu std :: isNaN gibi testler()/std :: isinf() onlar üretilecek için ne yaparsanız NaN/Inf algılayacaktır.) GCC aksine

+0

Büyük olasılıkla. Bildiğim kadarıyla, derleyiciye eklenen her bir anahtar Microsoft tarafındaki test çabalarını ikiye katlıyor. Bu yüzden şimdi yeni anahtarlar eklemekten oldukça isteksizler. – stgatilov

cevap

1
guarantees that tests like std::isnan()/std::isinf() 

MSVC (CL RC 19) aslında /fp:fast ayarına std::isnan dışarı optimize değildir:

dışarı optimize asla başka alternatif C99 isnan veya MSVC _isnanf içsel aramak. Veya std::numeric_limits::quiet_NaN ile üretilebilen bilinen bir bit maskesine karşı kendi nan testinizi yapın.

bakınız: Eğer böyle bir anahtarı bulamazlar https://godbolt.org/g/YdZJq5