使用c++的Exp函数
exp function using c++
我不明白为什么我总是得到结果1。#INF从my_exp()
当我给它1作为输入。下面是代码:
double factorial(const int k)
{
int prod = 1;
for(int i=1; i<=k; i++)
prod = i * prod;
return prod;
}
double power(const double base, const int exponent)
{
double result = 1;
for(int i=1; i<=exponent; i++)
result = result * base;
return result;
}
double my_exp(double x)
{
double sum = 1 + x;
for(int k=2; k<50; k++)
sum = sum + power(x,k) / factorial(k);
return sum;
}
您的factorial
函数中有一个整数溢出。这导致它输出零。49!
能被2^32
整除,所以你的factorial
函数将返回零。
然后除以它,使它趋于无穷。因此,解决方案是将prod
更改为double
:
double prod = 1;
与其完全计算展开中每一项的幂和阶乘项,不如考虑第k项与第k-1项之间的关系,并根据这种关系更新每一项。这将避免幂函数和阶乘函数中令人讨厌的溢出(您将不再需要它们)。例如
double my_exp(double x)
{
double sum = 1.0 + x;
double term = x; // term for k = 1 is just x
for (int k = 2; k < 50; k++)
{
term = term * x / (double)k; // term[k] = term[k-1] * x / k
sum = sum + term;
}
return sum;
}
你应该把k的最大值从50降到30这样就可以了;
和一个问题你的代码工作在接近0 ?
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 在 c++ 中计算对数和 exp 函数
- C++ exp 在 i7-3770 和 i7-4790 上的 x64 下函数不同的结果
- CMake 无法检测 gcc 内置函数,如 sqrt、pow、exp 等
- 如何在使用常用数学函数exp()log()时防止溢出
- 特征日志和exp函数类型转换错误
- 使用c++的Exp函数
- 如何找出 exp() 内置函数的 C 数字库<cmath>的内容