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? Tolacak float, doubleya 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.141592veatan(1) * 4?