對比了幾種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 ...