[英]how do I replace pow()?
如何在我的代碼中在兩種情況下替換 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;
}
double S(double x, int n)
和double U(double x)
。cos(k * M_PI / 4)
具有重復值,因此可以存儲在表中。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;
}
對於內部循環,如果您認為在前一次迭代中您已經計算了pow(x,k-1)
並且pow(x,k) == pow(x,k-1)*x
,則無需在每次迭代中計算功率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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.