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() ,這是我的戰俘mypow()槽連續分數和taylorseries返回更大的數量比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 ......並且它正在增長。 Thans爲所有迴應。
如果增長:這聽起來很像一個積累的舍入問題:中間計算的結果並不完全適合他們的臨時變量。你只是遇到了機器的精度限制,而且我懷疑這些錯誤會累積,因爲你主要是增加和相乘(實驗:例如'x = 0.5'作爲輸入時的結果是什麼,其中'tailor_log'給你否定的結果?) 。如果是這樣的話,你需要找到一些聰明的方法(重新配置)來避免這些舍入錯誤。 – Evert