আমি করবো
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
?