我正在尝试sine
使用泰勒级数扩展构建一个简单的函数,可以在编译时使用 C++14 进行评估constexpr
。我的代码正在编译,但编译器不会生成常量。
sine
定义如下:
template <int P, typename T = double> constexpr T sine(T x) {
T result = x;
for (int i = 1; i < P; ++i)
result += power<T>(-1, i) * power<T>(x, 1 + 2 * i) / factorial<T>(1 + 2 * i);
return result;
}
如果需要power
,我可以提供代码。factorial
它们是微不足道的,也是constexpr
。
我sine
从这样的循环中调用:
template <int N> void test(double *out) {
for (int i = 0; i < N; ++i) {
out[i] = sine<20, double>(i * M_PI / N);
}
}
我期待编译器可以生成一组结果sine
并将它们放入out
而不需要实际计算泰勒级数。相反,生成的代码sine
就像任何其他非constexpr
函数一样执行。
我的编译器是从 Xcode 7.2 编译的-O3
.