LOG演算法對比測試

2021-10-01 22:45:21 字數 1794 閱讀 3658

對比了幾種log演算法,函式double in(double x)效果最好。會根據數值大小動態調整運算方法。實測和windodws計算器的結果相當。而且運算效率也不錯。最後有簡單對比測試結果。

#include#includeint csum = 0;

double coef(int n)

#define par_n 10

double horner(double x)

double fabs(double a)

double n_sqrt(double a)

return x;

}double in(double x)// ln(1+x)=x-x^2/2+x^3/3-x^4/4……

return (1 << i) * horner(x - 1);

} else if (x < 0.7 && x > 0)

return (1 << i) * horner(x - 1);

} else if (x > 0)

return horner(x - 1);

return 0.0;

}double mylog(double a)

return 2.0*x*y;

}

double mylog100(double a)

return 2.0*x*y;

} #define epsilon 10e-6

#define ln10 2.30258509299404568401

long double ln(long double c)

c=(c-1.0)/(c+1.0);//marclurin公式變換技巧

delta=c;i=0;

dowhile(fabs((2*delta)/(2*i+1))>epsilon);

printf("迴圈次數為%d\n",i-1);

return 2*s2;

}int main()

else

input=c-1.0;//方便使用maclaurin公式

delta=input;i=1;

dowhile(fabs(delta/i)>epsilon); //當x>1時增量不收斂,進入死迴圈

printf("方式三:\n");

printf("迴圈次數為%d\n",i);

printf("結果為:%.10f\n",s1);

}} return 0;

}

測試結果對比,從對比結果發現,對於接近0的資料,函式double in(double x)效果比較好,對於大整數,方式一的比較好。

請輸入

ln0.000000001

結果為:-20.7232601798

迴圈次數為86

方式一:

迴圈次數為99959

結果為:-13.4756356109

方式二:

迴圈次數為99959

結果為:-13.4756356109

方式三:

迴圈次數為99991

結果為:-12.0899461379

請輸入ln999999999

結果為:20.7232657864

迴圈次數為81

方式一:

迴圈次數為20

結果為:20.7232426180

方式二:

迴圈次數為99959

結果為:13.4756356109

方式三:

當x>1時增量不收斂,第三種展開方式進入死迴圈

測試演算法對比

測試條件 開發環境 keil4 晶元訊號 stm32f103c8t6 主頻 64mhz 1 測試math temp1 squarerootfloat 5.0f float squarerootfloat float number long i float x,y const float f 1.5f...

JWT演算法對比測試

專案在解決臨時許可權的問題,欲引入jwt,故評估對比jwt實現方式之一jws rfc文件 的相關簽名演算法 由jwa規定 指導簽名演算法選擇。測試環境 作業系統 mac os 記憶體 8gb cpu core 2 本地測試只做效能縱向對比,具體耗時取決於具體執行環境 測試結果 演算法迴圈次數 總耗時...

測試log分析方法

目前所知的monkeytest測試主要有空指標和找不到資源類的問題。查詢方法 搜尋對應的包名,如 com.android.contacts搜尋聯絡人出現的問題。解決方法 一般情況下是在對應的地方捕獲異常。android.content.res.resources notfoundexception ...