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