2012-02-21 11 views
5

है, तो मैं यह जांचने की कोशिश कर रहा हूं कि std::complex संख्या जो कि चौकोर परिवर्तन का परिणाम है (http://fftw.org/ का उपयोग कर) में वास्तविक या कल्पना भाग में NaN शामिल है।जांच कर रहा है कि कोई जटिल संख्या NaN

मैं बोर्लैंड सी ++ का उपयोग कर रहा हूं, इसलिए मेरे पास std::isnan तक पहुंच नहीं है। , मैं एक "चल बिन्दु अवैध आपरेशन" मिल

(n.imag() != n.imag()) 

हालांकि, जैसे ही मैंने n.imag() या std::imag(n) फोन: मैं अपने आप से तुलना करके यदि संख्या NaN है की जाँच की कोशिश की है।

क्या std::complex अच्छा है तो सत्यापित करने का कोई तरीका है; अगर इसमें NaN है?

+5

यदि यह 'std :: isnan' का समर्थन नहीं करता है तो अपने कंपाइलर को बदलें। – Nawaz

+0

नवाज: इस पर काम करना। लेकिन यह एक बड़ा कोड बेस है और मुझे उत्पाद को औसत समय में बनाए रखना है। – dagur

उत्तर

0

मुझे पता चला कि बोर्लैंड की अपनी गणित पुस्तकालय है। तो यदि आप फ़्लोटिंग पॉइंट त्रुटियों से बचना चाहते हैं, तो बोर्लैंड्स मैथ से इज़न का उपयोग करें।

http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/[email protected]

+0

जटिल संख्या में NaN की जांच करने के लिए, मुझे बोर्लैंड में यह हैक करना था: std :: जटिल एन; डबल ए (एन ._वेल [0]); डबल बी (एन। वैल [1]); इस्नान (ए) || IsNan (बी), जहां IsNan Math.hpp में परिभाषित किया गया है – dagur

4

इस ++ जी पर काम करता है:

#include<iostream> 
#include<cmath> 
#include<complex> 

int main(){ 

    double x=sqrt(-1.); 
    std::complex<double> c(sqrt(-1.), 2.); 

    std::cout<<x<<"\n"; 
    std::cout<<c<<"\n"; 

    std::cout<< ((c!=c) ? "yup" : "nope")<<"\n"; 
} 
+0

संपादित करें: यह काम करता है। मैंने कोशिश की, और यहां आउटपुट है: + एनएएन (+ एनएएन, 2) नोप – dagur

+0

@ दागुर: तो यह काम किया --- यह आपको एक जटिल संख्या के लिए 'yup' बताता है जो एक नाएन है। क्या मैं कुछ भूल रहा हूँ? –

+0

हां, जब मैंने महसूस किया कि मैं अपनी प्रतिक्रिया को संपादित करने में धीमा था :)। – dagur

0

वहाँ math.h में fpclassify() है? इसे NaNs के लिए FP_NAN वापस करना चाहिए। या बेहतर अभी तक isnan() का उपयोग करें। यदि ऐसे कोई फ़ंक्शन/मैक्रोज़ नहीं हैं, तो आप अपने फ्लोट या युगल के बाइनरी प्रस्तुति को देख सकते हैं और NaNs के लिए मैन्युअल रूप से जांच सकते हैं। विवरण के लिए आईईईई -754 एकल और डबल परिशुद्धता प्रारूप देखें।

+0

fpclassify() std Borland C++ में मौजूद प्रतीत नहीं होता है – dagur

1

float.h हैडर

int _isnan(double d); 

से एक nonzero मूल्य (TRUE) वापस लौटाता में पारित मूल्य एक NaN है; अन्यथा यह 0 (FALSE) देता है।

int _fpclass(double __d); 

एक पूर्णांक मान देता है जो इसके तर्क के फ़्लोटिंग-पॉइंट क्लास को इंगित करता है। संभव मूल्य FLOAT.H (NaN, INF, आदि) में परिभाषित किए गए हैं

संबंधित मुद्दे