[問題] VC2008 double運算

看板C_and_CPP作者 (駿仔)時間12年前 (2011/11/07 00:02), 編輯推噓5(5020)
留言25則, 5人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC2008 問題(Question): 寫了一個算標準差的程式,要算sigma,我用的data type 是 double 算式大概是這樣子的 //先算 BAR double BAR = 0 ; for(int i =0 ; i< size ; i++) { Abar += A[i]; } Abar = Abar / SIZE ; sigma (A - Abar ) * (A - Abar) / N - 1 最後再作開根號 我的寫法是 double sum=0; for(int i = 0 ; i < size ; i++) { sum += (A - Abar ) * (A - Abar); } sum / ( size - 1 ); sqrt(sum); 餵入的資料(Input): for 回圈內的 size 大概有100筆左右 但最後cout sum 出來顯示成 -1.#IND 請問板上比較有經驗的前輩們這代表什麼意思?? 這是代表溢位了嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.33.86.65

11/07 00:06, , 1F
我在想還有可能是除到或加到null的值QQ
11/07 00:06, 1F

11/07 00:11, , 2F
你sqrt前一行真的是那樣寫嗎= =?
11/07 00:11, 2F

11/07 00:11, , 3F
sum / (size - 1) sqrt() 內不能傳負值
11/07 00:11, 3F

11/07 00:11, , 4F
你的意思應該是 sum = sum / (size - 1); ?
11/07 00:11, 4F

11/07 00:13, , 5F
話說回來 A-A爸 跟 B-B爸 是不是要取絕對值阿
11/07 00:13, 5F

11/07 00:23, , 6F
看起來像是在算 covariance 記得那是不用加絕對值的
11/07 00:23, 6F

11/07 00:25, , 7F
歐 是在算標準差
11/07 00:25, 7F

11/07 00:25, , 8F
(size - 1 ) 有加括號,沒寫清楚 sorry
11/07 00:25, 8F
※ 編輯: chun0208 來自: 114.33.86.65 (11/07 00:26)

11/07 00:26, , 9F
你的數字大概多大?
11/07 00:26, 9F
程式太大了qq 所以前面貼的CODE只是想要表達出我要算的意思 照成誤會金拍謝 數字的話大概是從10~1000不等 ※ 編輯: chun0208 來自: 114.33.86.65 (11/07 00:27)

11/07 00:27, , 10F
現在這是正確版本?
11/07 00:27, 10F
※ 編輯: chun0208 來自: 114.33.86.65 (11/07 00:30)

11/07 00:29, , 11F
這個範圍的話照理說是不會溢位...會不會是陣列存取超出範圍?
11/07 00:29, 11F

11/07 00:30, , 12F
這個迴圍和 Abar Bbar 的計算的迴都圈檢查一下
11/07 00:30, 12F

11/07 00:30, , 13F
這個迴圈和 Abar Bbar 的計算的迴圈都檢查一下 (修正
11/07 00:30, 13F

11/07 00:31, , 14F
好喔喔 謝謝各位~剛剛因為腦中都是標準差跟共變異數
11/07 00:31, 14F

11/07 00:31, , 15F
有點搞混QQ
11/07 00:31, 15F

11/07 02:55, , 16F
以前寫的,參考一下 http://codepad.org/GSn6xEcs
11/07 02:55, 16F

11/07 02:56, , 17F
雖然應不會犯這錯,但還是要提醒,size要抓 <=1 error
11/07 02:56, 17F

11/07 03:01, , 18F
sum += (A[i] - Abar ) * (A[i] - Abar); 是筆誤嗎 ?
11/07 03:01, 18F

11/07 03:12, , 19F
謝謝樓上大大,話說那不是筆誤唷~
11/07 03:12, 19F

11/07 03:13, , 20F
標準差公式上說要平方合 然後除以n-1之後再開根號
11/07 03:13, 20F

11/07 03:13, , 21F
還有謝謝各位QQ 我找到錯誤了!!! 我之前的資料處理有錯誤
11/07 03:13, 21F

11/07 03:13, , 22F
導致用到超出array範圍的地方!
11/07 03:13, 22F

11/07 03:45, , 23F
果然是超出範圍 所以才會有奇怪的 pattern 被當成浮點數
11/07 03:45, 23F

11/07 03:45, , 24F
不然這種運算照理說是不會出現 NaN 的
11/07 03:45, 24F

11/07 03:50, , 25F
恩ㄚㄚ!! 第一次看到那種東西QQ 完全搞不懂
11/07 03:50, 25F
文章代碼(AID): #1Ejg-QhL (C_and_CPP)