高精度對數函式的實現二

2021-07-12 01:50:46 字數 1390 閱讀 2374

針對泰勒展開式:ln(1+x)=x-x^2/2+x^3/3-……+(-1)^(k-1)*(x^k)/k(|x|

轉換成:ln(1+x)=x(1-x(1/2-x(1/3-x(1/4-x(1/5..........)))))

這樣轉換並沒有提高效率,但可以預算1/2 1/3 1/4 1/5.....針對一萬精度,因為經過了開方優化,這裡只需要10000\70=133次泰勒級數運算,所以可以預製133個萬位長數的**供呼叫,

粗略估計可以獲得一秒的速度提公升。

還可轉換成:ln(1+x)=(x(n!-x(n!/2-x(n!/3-x(n!/4-x(n!/5..........)))))   )/n!        n是你需要運算的泰勒級數

這個轉換不僅不能提高效率,在我的程式萬位運算中,速度還有所下降。

但它還是有用的:

現在計算十萬精度的ln(9),1-100000的倒數絕大多數都是非整數,我的意思就是除不斷,為了獲得十萬精度,這些倒數你需要計算或預製十萬位,100000\70=1428,這裡需要1428次泰勒級數運算,

1428!的位長是3886,1428!除以(1-100000)中的任何數都能除斷(整除),都只需要3886位(多精對單精)除法運算(當然這裡需要除法子程式有判斷除法除盡的功能),這樣,1428個十萬位除法就變成了(1428個3886位(多精對單精)除法,再加上乙個十萬除以十萬的(多精對多精)除法),  為什麼在我程式是沒有效果是因為我的精度要求過低造成了泰勒級數運算過少。說明一下:1\99999取十萬位,雖然1只有一位,但還是要經過十萬位運算,1需要擴充套件到十萬位才能進行除法運算。

專門針對ln(1+x)=x(1-x(1/2-x(1/3-x(1/4-x(1/5..........))))) 進行了測試

ln(9),精度十萬,泰勒級數1428,用時1322秒

針對ln(1+x)=(x(n!-x(n!/2-x(n!/3-x(n!/4-x(n!/5..........)))))   )/n!    進行了測試

ln(9),精度十萬,泰勒級數1428,用時28秒,提速47倍

精度十萬,1/99999,用時820ms,

精度十萬,1428!/99999,用時15ms,除法的提速和總程式的提速大致吻合。

針對我經常講的精度控制,可能很多人不理解,如果要進行算式運算或綜合運算,沒有精度控制,整個程式就和沒有監督的權力一樣,是不健全的....,錯誤多多,

我早期的程式就沒有精度控制,結果在實現三角函式和開n次方函式時,一直不成功。

n!就是1-n的公倍數,所以能整除,

1-n的最少公倍數是多少?用最小公倍數代替n!效果會更好

這個公式的提速原理是

精度大於n!的位長

,大多少?公式開始提速?要通過測試確定,當然是越大越好。

第二個提速原理就是

盡量把除不盡的除法換算成能整除的除法

高精度計算 二 高精度的加法運算

例 高精度加法運算 輸入正整數 a 和 b,輸出 a b 的值。0 輸入 第一行 a 第二行 b 輸出 a b 的和。樣例輸入 99 999樣例輸出 1098 分析 1 加法運算 a 7 a 6 a 5 a 4 a 3 a 2 a 1 0 0 b 5 b 4 b 3 b 2 b 1 c 7 c 6 ...

高精度計算 二 高精度的加法運算

例 高精度加法運算 輸入正整數 a 和 b,輸出 a b 的值。0 輸入 第一行 a 第二行 b 輸出 a b 的和。樣例輸入 99 999樣例輸出 1098 分析 1 加法運算 a 7 a 6 a 5 a 4 a 3 a 2 a 1 0 0 b 5 b 4 b 3 b 2 b 1 c 7 c 6 ...

指對數函式底數a的規定理由

通過本博文解釋指數函式和對數函式的底數 a 0 且 a neq1 的規定理由。對於指數函式 y a x 而言,我們必須限制其底數 a 的取值 否則可能出現 混亂局面 若 a 0 則對於 x 的某些數值,可使 a x 無意義,如 2 在實數範圍內函式無意義 也可能出現乙個自變數對應兩個函式值的情形,比...