簡體   English   中英

我如何替換 pow()?

[英]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;
}

我的任務條件

  1. 不要將所有內容都寫在 main 中。
  2. 定義double S(double x, int n)double U(double x)
  3. sum 的每個元素都可以根據前一個元素計算。
  4. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM