में नैन और इंफ को पकड़ें मैंने आज दर्द से सीखा कि नैन और इंफ गंभीर पक्ष समस्याएं हैं। क्या आप उदाहरण के लिए जानते हैं कि sqrtf (NaN) से 15 गुना धीमा और sqrtf (-1) sqrtf (10.123132) से 30 गुना धीमी (!!) है - जो कि अपने स्वयं के धीमे, फ़्लोटिंग से है बिंदु गणना !? आप बकवास की गणना करते हैं, इसके लिए हास्यास्पद मात्रा की आवश्यकता होती है और इसे महसूस भी नहीं करते हैं।विंडोज सी ++
ठीक है, लिनक्स के तहत आप एक अपवाद फेंक कर नेन और Inf कीड़े पकड़ कर सकते हैं जब वे होते हैं:
#include <fenv.h>
feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW);
आपको लगता है कि कैसे प्राप्त कर सकता है Windows के तहत?
संपादित करें: बेंचमार्किंग कोड:
float a,b;
a = 1.0/0; //inf
a = -10; //also nice
long c=0;
long time = SDL_GetTicks();
for (long i=1;i<=1000000;i++) {
b=sqrt(a);
}
ostringstream Help; Help << SDL_GetTicks()-time;
//RESULT SHEET
//sqrt(1): 21ms
//sqrt(10): 21ms
//sqrt(10.123): 20ms
//sqrt(-10); 390ms
//sqrt(+-NaN): 174ms
//sqrt(inf): 174
आपने उस समय को कैसे माप लिया? शायद अपवाद छुपाए जाने के बजाय आपको केवल घटना को रोकना चाहिए? –
मूल्य की जांच करने के लिए 'isinf()' और 'isnan()' का उपयोग करें? http://msdn.microsoft.com/en-us/library/hh308344.aspx –
आप _controlfp() –