2011-06-12 41 views
14

Tüm fenv.h belgelerine (standartlara) oldukça kafa karıştırıcı, ancak özellikle feholdexcept ve kayan nokta istisnası için "non-stop modu" kavramı hakkında kafam karıştı. Anlatabildiğim kadarıyla, herhangi bir IEEE kayan nokta uygulamasında, istisnalar varsayılan olarak sinyalsiz/"non-stop", ve fenv.h arabirimleri, varsayılan olmadıkça bir sinyal modunu etkinleştirmenin bir yolunu sağlamaz gibi görünmektedir. IEEE olmayan sistemler veya sinyalleme istisnası maskesini ayarlamak için standart olmayan uzantılara sahip sistemler haricinde tüm feholdexcept konseptinin faydasızlığı var mıdır?Feholdexcept vb. Kullanımı nedir?

cevap

6

Kitaplığı uyguladığınızı ve kodunuzu çağırmadan önce arayanlarınızın kayan nokta ortamını ne yapabilecekleri hakkında hiçbir şey bilmediğinizi varsayalım. Bir istisnayı ortaya çıkartabilirler ve sıfıra bölme sıfıra ulaşan özel bir tuzak işleyicisi yükleyebilirler. 42. Kitaplığınızın, sıfıra bölme için varsayılan IEEE-754 davranışına sahip olduğunu varsayın. feholdexcept işlevi, bu davranışı zorlamak için bir araç sağlar. Arayanın ortamı, maskelenmemiş istisna ile tamamlandığında, fesetenv işlevi kullanılarak geri yüklenebilir.

Bu kuşkusuz kullanım oldukça belirsiz köşe durumdur, ama açıkçası herşeyfenv.h en programcılar için oldukça belirsiz.

+0

Standart kütüphane için, aksi belirtilmedikçe, şartnameye uygun davranacak varsayılan kayan nokta ortamında tüm işlevlerin çağrılması gerektiği göz önüne alındığında, üçüncü taraf kütüphane yazarlarının da yükü koymasının oldukça makul olacağını düşünüyorum arama uygulamasında. Özellikle 'fe *' işlevlerinin herhangi bir kullanımı, istisnaların kaybolmasına neden olabilecek kayan nokta optimizasyonlarını atlamak için derleyiciyi (GCC değil de olsa) tetikleyebildiği için ... –

+0

@R ..: '' fonksiyonları genellikle biraz tasarımda ve dokümantasyonda eksik. C kütüphanesinin en zayıf özelliği olabileceğini söyleyecek kadar ileri giderdim. İyileştirme önerileriniz varsa, bunları C kayan nokta çalışma grubuna iletmekten memnuniyet duyarız. –