gpt4 book ai didi

c - mypow() 槽连分数和 taylorseries 返回比 pow() 更大的数字

转载 作者:行者123 更新时间:2023-11-30 16:54:00 32 4
gpt4 key购买 nike

double taylor_log(double x, unsigned int n){
double tmp;
double sum = 0;
if(x < 1){
int j = 2;
x = 1 - x;
tmp = x;
sum = -x;
for(unsigned int i = 1; i < n; i++){
sum -= ((tmp *= x) / j);
j++;
}
return sum;
}
else if (x >= 1){
tmp = ((x-1)/x);
for(unsigned int i = 1; i <= n; i++){
sum += (tmp/i);
tmp *= ((x-1)/x);
}
return sum;

这是我的泰勒级数日志功能,可以正常工作。我使用这个公式来获得数字的指数函数。 formula for mypow()这是我的 pow 代码

double taylor_pow(double x, double y, unsigned int n){
double sum = 1.0;
int fac = 1;
double exp = y;
double lna = taylor_log( x, n);
for(unsigned int i = 1; i <= n; i++){
fac *= i;
sum += (exp * lna / fac );
exp *= y;
lna *= taylor_log( x, n);
}
return sum;

}现在我的问题是,如果我为我的函数进行 30 次迭代,那么这个数字会高于 pow()。例如 pow(2,3) = 8,我的 20 次迭代的结果是 8.0007...并且它还在增长。感谢所有回复。

最佳答案

int fac 溢出。将其更改为long double,效果好多了。

32 位有符号 int 只能保存最多 12! 的值,而 80 或 128 位长的 double 可以保存类似 2000! 的值。

关于c - mypow() 槽连分数和 taylorseries 返回比 pow() 更大的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40676382/

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