回 帖 发 新 帖 刷新版面

主题:为什么这句会提示溢出

ptop = Int(Sqr((Px(1) - Px(0)) * (Px(1) - Px(0)) + (Py(1) - Py(0)) * (Py(1) - Py(0))))
ptop为double,其他数组变量为整形

回复列表 (共6个回复)

沙发

乘法的积超过了整形

板凳


自己检查一下,按F8

3 楼

落枕了~~~~~~~~

4 楼

突然想到是不是因为((Px(1) - Px(0))的时候得出的结果是整形的,而它的结果又是超出范围的,所以报错对吧

5 楼

将整形用CDbl强制转换一下。

6 楼

没有检验你出错的情况,但给你另外一个建议
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))

我来回复

您尚未登录,请登录后再回复。点此登录或注册