主题:为什么这句会提示溢出
笑十三狼
[专家分:1040] 发布于 2008-02-03 15:47:00
ptop = Int(Sqr((Px(1) - Px(0)) * (Px(1) - Px(0)) + (Py(1) - Py(0)) * (Py(1) - Py(0))))
ptop为double,其他数组变量为整形
回复列表 (共6个回复)
沙发
一江秋水 [专家分:9680] 发布于 2008-02-03 17:22:00
乘法的积超过了整形
板凳
javake [专家分:910] 发布于 2008-02-03 22:13:00
自己检查一下,按F8
3 楼
kulerop [专家分:0] 发布于 2008-02-09 17:06:00
落枕了~~~~~~~~
4 楼
笑十三狼 [专家分:1040] 发布于 2008-02-10 23:12:00
突然想到是不是因为((Px(1) - Px(0))的时候得出的结果是整形的,而它的结果又是超出范围的,所以报错对吧
5 楼
华山论剑 [专家分:5310] 发布于 2008-02-12 09:26:00
将整形用CDbl强制转换一下。
6 楼
老大徒伤悲 [专家分:29120] 发布于 2008-02-13 13:07:00
没有检验你出错的情况,但给你另外一个建议
ptop = Int(Sqr((Px(1) - Px(0)) * (Px(1) - Px(0)) + (Py(1) - Py(0)) * (Py(1) - Py(0))))
中((Px(1) - Px(0)) 、(Py(1) - Py(0)) 都计算了两遍,不循环的情况下不怎么样严重,在循环中就会很占cpu,如果在大量循环中(例如像素判定、实时更新等)就让系统不堪重负。
所以,建议先进性两个减法计算,分别存到变量deltax、deltay里,然后再……
deltax=px(1)-px(0)
deltay=py(1)-py(0)
ptop=int(sqr(deltax*deltax+deltay*deltay))
我来回复