首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最佳平台无关π常数?

问最佳平台无关π常数?
EN

Stack Overflow用户
提问于 2014-02-18 23:16:14
回答 2查看 5.7K关注 0票数 13

我知道你可以用:

代码语言:javascript
复制
#define _USE_MATH_DEFINES

然后:

代码语言:javascript
复制
M_PI

得到常数π。但是,如果我正确地记住(欢迎注释),这是编译器/平台依赖的。那么,当我将pi常量从Linux移植到其他系统时,最可靠的使用方法是什么呢?

我知道我可以定义一个float/double,然后自己将它设置为一个圆形pi值,但是我非常想知道是否有一个指定的机制。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-18 23:22:00

会见C++有一篇关于生成pi:C++和π的不同选项的文章--他们讨论了来自卡马奇的一些选项,后者不是独立于平台的:

代码语言:javascript
复制
double pi = M_PI;
std::cout << pi << std::endl;

来自助推

代码语言:javascript
复制
std::cout << boost::math::constants::pi<double>() << std::endl

并且使用阿坦,从SchighSchagh指出这并不是独立于平台的那一刻起就移除了removed:

代码语言:javascript
复制
 double const_pi() { return std::atan(1)*4; }

我将所有的方法聚集到一个实例化中。

代码语言:javascript
复制
#include <iostream>
#include <cmath>
#include <boost/math/constants/constants.hpp>

double piFunc() { return std::atan(1)*4; }

int main()
{
    double pi = M_PI;
    std::cout << pi << std::endl;
    std::cout << boost::math::constants::pi<double>() << std::endl ;
    std::cout << piFunc() << std::endl;
}

C++2a pi_v

在C++2a中,我们应该得到V

代码语言:javascript
复制
#include <numbers>
#include <iostream>

int main() {
     std::cout<< std::numbers::pi_v<double> <<"\n";
}
票数 14
EN

Stack Overflow用户

发布于 2014-02-19 01:39:32

下面的函数计算pi时完全不依赖任何库。

而且,其结果的类型是一个模板参数。

Platform ueber独立性受到了一点抑制,因为它只适用于固定精度的小数类型--计算值需要在2次迭代中收敛并保持不变。

因此,如果您指定了某种任意精度的rational或浮点类,它将根据需要自动提高其精度,那么对该函数的调用就不会很好地结束。

代码语言:javascript
复制
#include <iostream>
#include <iomanip>

namespace golf {
    template <typename T> inline T calc_pi() {
        T sum=T(0), k8=T(0), fac=T(1);
        for(;;) {
            const T next = 
                sum + fac*(T(4)/(k8+T(1))-T(2)/(k8+T(4))-T(1)/(k8+T(5))-T(1)/(k8+T(6)));
            if(sum == next) return sum;
            sum=next;
            fac /= T(16);
            k8  += T(8);
    }   }
    static const auto PI = calc_pi<double>();
}

int main() {
    std::cout << std::setprecision(16) << golf::PI << std::endl;
    return 0;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21867617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档