[問題] 不定個參數函數

看板C_and_CPP (C/C++)作者 (做遊戲的心)時間16年前 (2009/10/28 15:45), 編輯推噓4(4013)
留言17則, 4人參與, 最新討論串1/1
遇到的問題: 1.為什麼x不需要初始化? 2.13是怎麼來的? 開發平台: Visual Studio 2005 有問題的code: double g_avg(double x, double y, ...){ double total = 0, temp; va_list var; va_start(var, y); while(fabs(temp = va_arg(var, double)) >= 1e-13){ total += pow(temp, x); } total = pow(total, 1/y); va_end(var); reutrn total; } 補充說明:這是一個取幾何平均數的函數 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.125.196.251 ※ 編輯: NIKE74731 來自: 122.125.196.251 (10/28 15:47) ※ 編輯: NIKE74731 來自: 122.125.196.251 (10/28 15:58)

10/28 16:16, , 1F
1.x在第一行就初始化,你要給函式 2.1e-13表示1*10^(-13)
10/28 16:16, 1F
※ 編輯: NIKE74731 來自: 122.125.196.251 (10/28 16:28)

10/28 16:29, , 2F
請問s大 第一行是指哪一行?另外我想問的是為何是13不是
10/28 16:29, 2F

10/28 16:30, , 3F
12或14?
10/28 16:30, 3F

10/28 16:35, , 4F
使用函式的時候g_avg(1,2,...); 這時候就令x=1,y=2了
10/28 16:35, 4F

10/28 16:36, , 5F
這要看作者用fabs來達成什麼目的,應該只是個threshold
10/28 16:36, 5F

10/28 17:20, , 6F
var_start() 第二個參數是要指出哪個參數是最後一個固定參
10/28 17:20, 6F

10/28 17:20, , 7F
數,並不是說那是初始化 y,我想你第一個可能是這搞錯。
10/28 17:20, 7F

10/28 18:03, , 8F
fabs是取絕對值的意思
10/28 18:03, 8F

10/28 18:18, , 9F
我想s大知道fabs的用途, 他想說的是這邊算絕對值要拿來
10/28 18:18, 9F

10/28 18:18, , 10F
作什麼, 這也影響到為什麼要取1e-13....@_@"
10/28 18:18, 10F

10/28 18:22, , 11F
話說, 這個函數是算未知總數的double資料的x次方的合,
10/28 18:22, 11F

10/28 18:23, , 12F
y是不是得給對對應未知的長度啊?_?
10/28 18:23, 12F

10/28 18:25, , 13F
Hmm~~看起來未知總數是以0做結束, 只是為了避免精確度誤
10/28 18:25, 13F

10/28 18:25, , 14F
差, 所以以取到的值是否>=一個很小的數來當作結束....
10/28 18:25, 14F

10/28 18:26, , 15F
只要算幾何平均, 我以為y要去算while跑了幾次?_?
10/28 18:26, 15F

10/28 18:28, , 16F
而且total不是應該用乘的乘起來嗎@_@"
10/28 18:28, 16F

10/28 22:06, , 17F
搞錯了= ="不是求幾何平均數 不過不是重點
10/28 22:06, 17F
文章代碼(AID): #1Av_Qs5i (C_and_CPP)
文章代碼(AID): #1Av_Qs5i (C_and_CPP)