如何在我的代码中替换两种情况下的pow()函数?
我认为这可以通过一个for循环来完成。
#include <iostream>
#include <cmath>
using namespace std;
int main(){
double a, b, h, PI = 3.141592;
int n;
cin >> a >> b >> h >> n;
for (double x = a; x <= b; x += h) {
double ans = 1, y;
for (int k = 0; k <= n; k++) {
ans *= cos(k * PI / 4) * pow(x, k);
for (int i = 2; i <= k; i++) {
ans /= i;
}
}
y = pow(exp(cos(x * sin(PI / 4))), x * cos(PI / 4));
cout << ans << " " << y << " " << fabs(y-ans) << endl;
}
return 0;
}

发布于 2020-09-23 17:38:34
sum并不是所有内容都写在double U(double x).
double S(double x, int n)和sum的元素可以根据上一次求和的重复值来计算,因此可以将其存储在表中。double S(double x, int n)
{
double a = 1;
double s = a;
constexpr double q = std::cos(M_PI / 4);
constexpr double cos_val[]{ 1, q, 0, -q, -1, -q, 0, q };
for (int k = 1; k <= n; ++k) {
a *= x / k;
s += cos_val[k & 7] * a
}
return s;
}发布于 2020-09-23 17:31:18
对于内部循环,如果考虑到在前一次迭代中已经计算了pow(x,k-1)和pow(x,k) == pow(x,k-1)*x,则不需要在每次迭代中计算功率
double pow_x = 1; // on first iteration pow(x,0) == 1
for (int k = 0; k <= n; k++) {
ans *= cos(k * PI / 4) * pow_x;
// ...
pow_x *= x; // pow(x,k) -> pow(x,k+1)
}在您的代码中第二次使用pow不容易被替换,因为浮点指数。您必须重写pow才能获得相同的结果。但是,您的代码与图像中的公式不匹配。图中写着(伪数学符号):
e ^ ( x * C1 ) * C2您的代码正在计算
y = pow(exp(cos(x * sin(PI / 4))), x * cos(PI / 4));
( e^(C2) ) ^ (x * C1)将其更改为
y = exp(x * cos(PI / 4)) * cos(x * sin(PI / 4))https://stackoverflow.com/questions/64024754
复制相似问题