yapardım
template<typename T>
T const pi = std::acos(-T(1));
veya
template<typename T>
T const pi = std::arg(-std::log(T(2)));
Ben ediyorum değil ihtiyacınız hassas tt yazarak . Bunun anlamı ne? İhtiyacınız hassas hassas olduğunu T
, ama biz hakkında hiçbir şey bilmiyoruzT
.
Şunu söyleyebilirsiniz: Neden bahsediyorsun? T
olacak float
, double
ya da long double
. Yani, sadece hassasiyetini yazın long double
, yani
template<typename T>
T const pi = static_cast<T>(/* long double precision π */);
Ama gelecekte standartta yeni bir kayan nokta türü olmayacağını gerçekten biliyor musunuz? long double
? Yapmazsın.
İşte bu yüzden ilk çözüm çok güzel. Standardın yeni bir tip için trigonometrik fonksiyonları aşırı yükleyeceğinden emin olabilirsiniz.
Ve lütfen, başlangıçta trigonometrik bir fonksiyonun değerlendirilmesinin performans cezası olduğunu söyleme.
3.14
,3.141592
veatan(1) * 4
?