计算 e^x 的近似值时出错
Error when Calculating the Approximate Value of e^x
我对 c++ 相当陌生,并编写了一个程序来计算 e^x 的近似值。由公式给出:
1 + X + X^2/2! + ... + X^n/n! (for values of n from 1-100)
程序完美地计算值,直到用户输入大于 60(即 61 或更大的数字(的"xValue"。我不确定为什么会这样,非常感谢一些反馈:
void calculate_sum(CalculateEx& numberSum)
{
double factoralSum;
numberSum.xTotal = numberSum.xValue;
numberSum.xTotal++;
for (double counter = 2; counter <= 100; counter++)
{
factoralSum = 1;
for (double factoral = 1; factoral <= counter; factoral++)
{
factoralSum *= factoral;
}
numberSum.xNextValue = pow(numberSum.xValue, counter) / factoralSum;
numberSum.xTotal += numberSum.xNextValue;
}
return;
}
不要从头开始计算下一行元素,存储上一行元素,x^(n+1)/(n+1)! == (x^n)/n! * x/(n+1)
.这样,您就不必单独存储x^n
的值,尤其是n!
的值(它们太大而无法容纳任何合理的类型(,而x^n/n!
的值随着n
的上升而收敛到0。
做这样的事情就可以了:
double prevValue = 1;
sum = prevValue;
for (size_t power = 1; power < limit; ++power) {
prevValue *= x / (n + 1);
sum += prevValue;
}
即使是双精度也只能容纳这么多数字。计算机始终有限制。我对科学计算一无所知,但我想如果你想要更高的精度,你可能必须找到一个四精度浮点数或其他东西。
程序正在尝试计算超出正常双精度范围的数字。您可以通过在计算它的循环之后打印 factoralSum
的值来验证这一点。如果您坚持使用 Taylor 扩展,您可能需要检查 DBL_MAX
的值<float.h>
Java有一个名为BigDecimal
的类,它允许你创建具有任意大精度的数字。在C++中,你可能想参考这个问题:有没有一个C++等同于Java的BigDecimal?
相关文章:
- 访问者访问变体并返回不同类型时出错
- 在Linux for Windows上编译C++代码时出错
- 读取文件的最后一行并输入到链接列表时出错
- 重载操作程序时出错>>用于类中的字符串 memebr
- 调用专用模板时出错"no matching function for call to [...]"
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- LINK 尝试使用 OpenSSL evp aes 256 c++ 时出错
- 在Google Kick start中提交时出错
- 在c++中访问int到类对象的映射时出错
- 分段错误当我试图运行程序时出错
- 使用dynamic_cast和构造函数时出错
- CHECK(调用)函数在Google Colab中出错
- 用pybind11包装C++抽象类时出错
- 为x86而非x64编译时出错
- 从R调用C++函数并对其进行集成时出错
- 这个函数哪里出错了
- C++ 创建包含链表和字符串的对象的链接列表时出错
- 为重写std::exception的库生成swig接口时出错
- 导入/导出变量时出错
- 计算 e^x 的近似值时出错