当值在十亿或更大时,VBA 中的 Mod 溢出错误

Boy*_*son 3 excel vba modulo

我试图找到一个数 x 的最大素数除数。当 x 小于 10 亿时,我的代码可以工作,但是当它大于 10 亿时,它会出现溢出错误,并且调试会突出显示其中包含 Mod 的行。

 Sub Largest_Divisor()
    Dim x As Double
    Dim Q As Integer
    Q = 0
    Dim L() As Double
    x = 999999999#
    Dim i As Double
    For i = 775145 To 3 Step -2
        If x Mod i = 0 Then
            If IsPrime(i) Then
                ReDim Preserve L(Q) As Double
                L(Q) = i
                Q = Q + 1
            End If
        End If
    Next i
    MsgBox (Application.Max(L))
 End Sub
Run Code Online (Sandbox Code Playgroud)

A. *_*ebb 5

我怀疑当x大于大约 20 亿时,2,147,483,648准确地说,你有问题。

这是因为根据 的文档mod,最多long返回 a,其值范围为-2,147,483,6482,147,483,647为 32 位有符号值。帮助文档中没有明确说明,但 的参数mod也可能被强制使用long