मैं सी में विशेष प्रयोजन गणित कार्यों की एक पुस्तकालय विकसित कर रहा हूं। मुझे लाइब्रेरी के लिए एकल-परिशुद्धता और डबल-परिशुद्धता दोनों को संभालने की क्षमता प्रदान करने की आवश्यकता है। यहां महत्वपूर्ण बात यह है कि "एकल" कार्यों को केवल "सिंगल" अंकगणितीय आंतरिक रूप से उपयोग करना चाहिए ("डबल" फ़ंक्शंस के लिए resp।सी कोड का उचित डिज़ाइन जो सिंगल- और डबल-प्रेसिजन फ़्लोटिंग पॉइंट दोनों को संभालता है?
एक उदाहरण के रूप में, LAPACK (फोरट्रान) है, जो अपने कार्य (सिंगल और डबल) में से प्रत्येक के दो संस्करण प्रदान करता है पर एक नज़र डालें। इसके अलावा सी गणित पुस्तकालय (उदाहरण, expf और एक्स)।
स्पष्ट करने के लिए, मैं निम्नलिखित (काल्पनिक) उदाहरण की तरह कुछ का समर्थन करना चाहते:
float MyFloatFunc(float x) {
return expf(-2.0f * x)*logf(2.75f*x);
}
double MyDoubleFunc(double x) {
return exp(-2.0 * x)*log(2.75*x);
}
मैं निम्नलिखित तरीकों के बारे में सोचा है: समारोह नाम के लिए
मैक्रो का उपयोग करना ।
#ifdef USE_FLOAT #define MYFUNC MyFloatFunc #else #define MYFUNC MyDoubleFunc #endif
चल बिन्दु प्रकार के लिए मैक्रो का उपयोग करना: यह अभी भी दो अलग-अलग स्रोत codebases की आवश्यकता है। यह मैं दो अलग अलग संस्करणों में codebase साझा करने के लिए अनुमति देता है:
#ifdef USE_FLOAT #define NUMBER float #else #define NUMBER double #endif
बस दो अलग-अलग पुस्तकालयों के विकास, और सिर दर्द को बचाने की कोशिश के बारे में भूल जाते हैं।
क्या किसी के पास कोई सिफारिश या अतिरिक्त सुझाव हैं?
हां, उस उत्कृष्ट बिंदु के लिए धन्यवाद। यहां लक्ष्य "डबल" के सटीक लाभ के खिलाफ "सिंगल" की निष्पादन गति को व्यापार करना बंद करना है। –