c++ - 如何将模板大小的数组初始化转换为 constexpr 初始化?

标签 c++ c++11

这是循环。基本上沿着圆的圆周生成一定数量的点。 points 数组显然是常量并且可以在编译时计算,但我似乎无法找到将其提升为 constexpr 的方法。

#include <array>
#include <cmath>

template <std::size_t Len>
class Circle {
public:
    Circle() {
        for (int i = 0; i < Len; i++) {
            float x = (float)std::cos(2 * M_PI * i / (Len - 1));
            float y = (float)std::sin(2 * M_PI * i / (Len - 1));
            points[i * 3] = x;
            points[i * 3 + 1] = y;
            points[i * 3 + 2] = 0;
        }
     }
 private:
     std::array<float, Len * 3> points;
 };

最佳答案

不能保证它们绝对准确,但它们可能足以满足您的目的。

我刚刚使用了泰勒级数近似值。添加 constexpr 并查看它们是否有效。

long double sin2r(long double const r, long double const t, long double const tn, unsigned long long k)
{
    return tn == 0 ? r : sin2r(r + ((k / 2) % 2 ? -1 : +1) * tn, t, tn * t * t / ((k + 1) * (k + 2)), k + 2);
}

long double cos2r(long double const r, long double const t, long double const tn, unsigned long long k)
{
    return tn == 0 ? r : cos2r(r + ((k / 2) % 2 ? -1 : +1) * tn, t, tn * t * t / ((k + 1) * (k + 2)), k + 2);
}

long double sin2(long double const t)
{
    return sin2r(0, t, t, 1);
}

long double cos2(long double const t)
{
    return cos2r(0, t, 1, 0);
}

关于c++ - 如何将模板大小的数组初始化转换为 constexpr 初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13657325/

相关文章:

c++ - 使用 libcurl/其他库的 facebook 图形 API

C++ CMake 编译指令与?

c++ - 检索递归可变参数模板的特殊类型参数

c++ - 从成员函数指针转换为另一种类型并返回,严格别名问题?

c++ - boost iostreams 的 QT 链接器错误

c++ - 尝试使用线程运行 CamShift

c++ - 在 OpenGL 中创建网格

c++ - 递归尾随返回类型的名称解析

c++ - 类(class)(员工)存放在哪个内存段(代码/数据段)?

c++ - 将数据从一个文件复制和粘贴到另一个文件时出错