gpt4 book ai didi

c++ - EXP 到泰勒级数

转载 作者:搜寻专家 更新时间:2023-10-31 00:20:55 27 4
gpt4 key购买 nike

我正在尝试将 exp(x) 函数扩展为泰勒级数。这是代码:

double CalcExp(){
double eps = 0.0000000000000000001;
double elem = 1.0;
double sum = 0.0;
int i = 1;
sum = 0.0;
do {
sum += elem;
elem *= x / i;
i++;
} while (elem >= eps);
return sum;

问题是当我输入大 X 或负 X 时我的程序崩溃了。当我输入“0.00000000001”之类的 X 时,结果是 -1。

需要建议。感谢您的帮助。

最佳答案

对于较大的 X 值(大约 700 及以上),您将达到 double 值的范围限制 (10^308) 并导致无限循环。您对此无能为力,您应该限制 X 输入范围或使用一些大数字库来扩展范围。

另一种解决方法是将其添加到您的循环中:

if (sum > 1E305) {
// we'll most likely run into an infinite loop
break;
}

注意你应该在循环之外处理这种情况,以避免打印出非常大的错误结果。

我无法重现 0.00000000001 的问题,这只会为我返回 1。负值也运行良好,尽管结果是错误的,这似乎是算法中的错误/限制。编辑:要更正此问题,我们可以使用 e^-x1/e^x 相同的事实。

代码:

#include <stdio.h>

double CalcExp(double x){
double eps = 0.0000000000000000001;
double elem = 1.0;
double sum = 0.0;
bool negative = false;
int i = 1;
sum = 0.0;
if (x < 0) {
negative = true;
x = -x;
}
do {
sum += elem;
elem *= x / i;
i++;
if (sum > 1E305) break;
} while (elem >= eps);
if (sum > 1E305) {
// TODO: Handle large input case here
}

if (negative) {
return 1.0 / sum;
} else {
return sum;
}
}

int main() {
printf("%e\n", CalcExp(0.00000000001)); // Output: 1.000000e+000
printf("%e\n", CalcExp(-4)); // Output: 1.831564e-002
printf("%e\n", CalcExp(-45)); // Output: 2.862519e-020
printf("%e\n", CalcExp(1)); // Output: 2.718282e+000
printf("%e\n", CalcExp(750)); // Output: 1.375604e+305
printf("%e\n", CalcExp(7500000)); // Output: 1.058503e+305
printf("%e\n", CalcExp(-450000)); // Output: 9.241336e-308
return 0;
}

关于c++ - EXP 到泰勒级数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5362573/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com