首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何替换pow()?

如何替换pow()?
EN

Stack Overflow用户
提问于 2020-09-23 17:17:11
回答 2查看 186关注 0票数 0

如何在我的代码中替换两种情况下的pow()函数?

我认为这可以通过一个for循环来完成。

代码语言:javascript
复制
#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;
}

EN

回答 2

Stack Overflow用户

发布于 2020-09-23 17:38:34

sum并不是所有内容都写在double U(double x).

  • each中。

  • 定义double S(double x, int n)和sum的元素可以根据上一次求和的重复值来计算,因此可以将其存储在表中。

代码语言:javascript
复制
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;
}
票数 5
EN

Stack Overflow用户

发布于 2020-09-23 17:31:18

对于内部循环,如果考虑到在前一次迭代中已经计算了pow(x,k-1)pow(x,k) == pow(x,k-1)*x,则不需要在每次迭代中计算功率

代码语言:javascript
复制
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才能获得相同的结果。但是,您的代码与图像中的公式不匹配。图中写着(伪数学符号):

代码语言:javascript
复制
e ^ ( x * C1 ) * C2

您的代码正在计算

代码语言:javascript
复制
y = pow(exp(cos(x * sin(PI / 4))), x * cos(PI / 4));

( e^(C2) ) ^ (x * C1)

将其更改为

代码语言:javascript
复制
y = exp(x * cos(PI / 4)) *  cos(x * sin(PI / 4))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64024754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档