為什么我們要取term的絕對值來求cos級數,什么時候term甚至會小于0.0001 請舉例說明?
X = (22.0/7.0) * (Theta/180.0);
CosX = 1.0;
Term = 1.0;
i = 1;
while(fabs(Term)>=0.0001){
Term = (-1) * Term * X*X/((2*i-1)*2*i);
CosX = CosX Term;
i ;
}
uj5u.com熱心網友回復:
項的符號交替:余弦的泰勒級數是
1 - x^2/2! x^4/4! - x^6/6! ...
// ^ ^ ^
然后,|x| 的第一個非平凡項 > 0 是負數,顯然 < 0.0001。
處理此問題的另一種方法是僅使用正項展開兩次。
do {
Term = Term * X*X/((2*i-1)*2*i);
CosX = CosX - Term;
i ;
Term = Term * X*X/((2*i-1)*2*i);
CosX = CosX Term;
i ;
} while (Term > 0.0001);
uj5u.com熱心網友回復:
回圈條件的思想是繼續逼近,直到最后一次變化很小,表明接近精確值。當然,這樣或那樣的條件是需要的,因為正確的值是未知的,并且因為到達它(即使已知)將花費低效的時間。
然而,變化的“小”,增量,是-10 大于 2 的那種小。即,如果最后一次更改是一個很大但負面的步驟,則回圈應該繼續。只有當變化不再向任一方向(正或負)移動太多時,才可以假設合理的近似值。
無論是通過獲取變化的絕對值進行比較,還是進行兩次檢查(一次針對小的正變化,另一次針對大的負變化——其中最大的當然非常接近于 0)都無關緊要。
uj5u.com熱心網友回復:
我們不必fabs在while回圈中使用
我們可以檢查兩個條件(負&&正):
while( wTerm >= 0.0001 || wTerm <= -0.0001){
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/378634.html
標籤:C
上一篇:C上的Strtok實作
