※ 引述《micklin (Mick@Tucson)》之銘言:
: 我寫了一隻程式對100*100的矩陣做QR分解, 然後輸出eigenvalue及eigenvector.
: 然後我把兩個eigenvector相乘, 得到一個數值.
: 這兩個100個元素的向量, 裡面的值是實數且有正有負,
: 問題來了, 我用程式加總之後的值跟Excel算出來的不一樣....
: 為了找出問題, 我印出 v1[i] v2[i] v1[i]*v2[i] 的值,
: 然後用程式算出 v1[i]*v2[i] 的值,
: 再把 v1[i]*v2[i] 的值貼到 Excel 用 Sum() 加總.
: 程式算出來的值是 7.1991e-017
: Excel 算出來的值是 0.00000008896 = 8.896e-8
: 差太多了, 我實在無法用"誤差"來說服自己....
: 有人遇過類似的問題嗎?
: 程式算出來的v1[i]*v2[i]和Excel算出來的倒是沒太大差異.
: 如果只計算 0 到 98 項, 或 1 到 99 項, 程式和 Excel 也沒太大差異.
: 若一百項全加起來, 值就差很多, 又因為我要求此值的倒數,
: 整個情況變的很混亂....
: 又, 我用VC2003, Release跟Debug所求出來的值是一樣的.
如果你確定你在計算的Algorithm Implement沒錯的話
會不會是你用的資料型態超過可以最大可表示的位數導致你計算時候
資料爆炸導致誤差?
我記得在如果是在.Net Framework 1.0上的話
以保留字保留字 flaot 宣告一個數值會用32bit表示一個浮點數
而double會用64bit表示一個浮點數..
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 134.208.2.196
※ 編輯: jackeyH 來自: 134.208.2.196 (03/08 23:01)