我遇到了这个错误,即使我所有的数据类型都很好。
运行时错误6溢出
这是功能:
Function equation(x As Long) As Long
Dim a As Long, b As Double
a = Int(((x - 2) Mod 8) / 6) + 2 * Int((x - 2) / 8)
b = (x + a - 1) / 2
equation = Abs(4 * b + 5 + 2 * Int(b))
End Function
当x = 572662307
说溢出时会遇到错误。
x = 572662307
。是32位签名整数(约20亿(的最大值的四分之一,因此您的算术操作可能确实会击中。
在VBA Long
中是一个32位签名的整数,并且不是C#中的64位签名整数。我建议将a
和x
同时更改为Double
。
您也可以扩散您的功能,因此您可以检查调试器中的所有中间步骤:
Function equation(x As Double) As Double
Dim a As Double, b As Double, c As Double, d As Double, e As Double, f As Double, g As Double
a = (x - 2) Mod 8
b = a / 6
b = Int( b )
c = (x - 2) / 8
d = 2 * Int( c )
e = b + d
f = (x + a - 1)
f = f / 2
g = 4 * b + 5 + 2 * Int( f )
equation = Abs( g )
End Function