作者NIKE74731 (做遊戲的心)
看板C_and_CPP
標題[問題] 不定個參數函數
時間Wed Oct 28 15:45:54 2009
遇到的問題: 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)
1F:推 snowlike:1.x在第一行就初始化,你要給函式 2.1e-13表示1*10^(-13) 10/28 16:16
※ 編輯: NIKE74731 來自: 122.125.196.251 (10/28 16:28)
2F:→ NIKE74731:請問s大 第一行是指哪一行?另外我想問的是為何是13不是 10/28 16:29
3F:→ NIKE74731:12或14? 10/28 16:30
4F:推 snowlike:使用函式的時候g_avg(1,2,...); 這時候就令x=1,y=2了 10/28 16:35
5F:→ snowlike:這要看作者用fabs來達成什麼目的,應該只是個threshold 10/28 16:36
6F:→ tinlans:var_start() 第二個參數是要指出哪個參數是最後一個固定參 10/28 17:20
7F:→ tinlans:數,並不是說那是初始化 y,我想你第一個可能是這搞錯。 10/28 17:20
8F:→ NIKE74731:fabs是取絕對值的意思 10/28 18:03
9F:推 VictorTom:我想s大知道fabs的用途, 他想說的是這邊算絕對值要拿來 10/28 18:18
10F:→ VictorTom:作什麼, 這也影響到為什麼要取1e-13....@_@" 10/28 18:18
11F:推 VictorTom:話說, 這個函數是算未知總數的double資料的x次方的合, 10/28 18:22
12F:→ VictorTom:y是不是得給對對應未知的長度啊?_? 10/28 18:23
13F:→ VictorTom:Hmm~~看起來未知總數是以0做結束, 只是為了避免精確度誤 10/28 18:25
14F:→ VictorTom:差, 所以以取到的值是否>=一個很小的數來當作結束.... 10/28 18:25
15F:→ VictorTom:只要算幾何平均, 我以為y要去算while跑了幾次?_? 10/28 18:26
16F:→ VictorTom:而且total不是應該用乘的乘起來嗎@_@" 10/28 18:28
17F:→ NIKE74731:搞錯了= ="不是求幾何平均數 不過不是重點 10/28 22:06