作者jackeyH (面包小男孩)
看板CSSE
标题Re: [问题] 怪异的加总问题
时间Thu Mar 8 23:00:27 2007
※ 引述《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)