[問題] 一條演算法問題

看板C_and_CPP (C/C++)作者 ( 嗨浪)時間13年前 (2012/10/01 01:55), 編輯推噓4(405)
留言9則, 5人參與, 最新討論串1/1
計算sin(x)的公式如下: sin(x)=x-x^3/3! + x^5/5! - x^7/7! + x^9/9! -.... (考慮求值到小數以下第六位) 請問以下程式if(sum<0.000001) return 0; 能過濾掉有整數加六位小數以下的值嗎 例如假如 sum = 2.5678999 這樣好像也不會濾掉 還是會加入吧? float sin_cal(float x, int exp,int sign) { float sum=1.0; int i; for( i=1 ; i<exp ; i++) { sum = sum * x / i; } if(sum<0.000001) return 0; else return (sin_cal(x,exp+2,-1*sign) + sign*sum); } 呼叫時: sin_cal(1,1,1);//x=1時 sin_cal(0.2,1,1);//x=0.2時 sin_cal(2.1,1,1);//x=2.1時 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.136.35.169

10/01 02:16, , 1F
"濾掉有整數加六位小數以下的值" 再說清楚些? 另,
10/01 02:16, 1F

10/01 02:16, , 2F
if(fabs(sum)<0.000001) return 0; ??
10/01 02:16, 2F

10/01 02:17, , 3F
!! 話說這遞廻怎麼怪怪的,至少要有 sum 當輸入引數吧..
10/01 02:17, 3F

10/01 08:07, , 4F
float sin_cal(), 應該改成 double
10/01 08:07, 4F

10/01 09:34, , 5F
那題是國考考提那時別人寫的我看不太懂猜他邏輯是那樣
10/01 09:34, 5F

10/01 09:35, , 6F
覺得他用那樣的終止條件好像怪怪的
10/01 09:35, 6F

10/01 09:35, , 7F
但也不招到要如何寫
10/01 09:35, 7F

10/01 12:47, , 8F
*100000...如果下一輪的值是一樣的就結束?
10/01 12:47, 8F

10/01 22:59, , 9F
看起來就單純遞迴直到當前計算的值小於小數點後六位吧
10/01 22:59, 9F
文章代碼(AID): #1GQ8T-B3 (C_and_CPP)
文章代碼(AID): #1GQ8T-B3 (C_and_CPP)