मुझे क्या करना होगा
template<typename T>
T const pi = std::acos(-T(1));
या
template<typename T>
T const pi = std::arg(-std::log(T(2)));
मैं आपकी जरूरत के हिसाब से टाइपिंग नहीं करूंगा । इसका क्या मतलब है? आपको जिस सटीकता की आवश्यकता है, वह सटीक है , लेकिन हम इसके बारे में कुछ नहीं जानते हैंT
T
।
आप कह सकते हैं: आप किस बारे में बात कर रहे हैं? T
होगा float
, double
या long double
। तो, बस की शुद्धता में टाइप करें long double
, यानी
template<typename T>
T const pi = static_cast<T>(/* long double precision π */);
लेकिन क्या आप वास्तव में जानते हैं कि भविष्य में मानक से अधिक सटीक सटीकता के साथ एक नया फ्लोटिंग पॉइंट प्रकार नहीं होगा long double
? तुम नहीं।
और इसीलिए पहला उपाय सुंदर है। आप यह सुनिश्चित कर सकते हैं कि मानक एक नए प्रकार के लिए त्रिकोणमितीय कार्यों को अधिभारित करेगा।
और कृपया, यह मत कहो कि प्रारंभ में त्रिकोणमितीय फ़ंक्शन का मूल्यांकन एक प्रदर्शन दंड है।
3.14
,3.141592
औरatan(1) * 4
?