Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Overflow error with Mod in VBA when value is in the billions or greater

Tags:

excel

modulo

vba

I am trying to find the largest prime divisor of a number x. When x is smaller than 1billion my code works but when it is greater than 1billion it gives an overflow error and debugging highlights the line with Mod in it.

 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
like image 934
Boyd Johnson Avatar asked Oct 17 '25 07:10

Boyd Johnson


1 Answers

I suspect it is when x is larger than about 2 billion, 2,147,483,648 to be precise, that you have trouble.

That is because as per the documentation of mod, at most a long is returned, which ranges in value from -2,147,483,648 to 2,147,483,647 as a 32-bit signed value. It is not explicitly stated in the help documentation, but the arguments of mod are probably coerced to long as well.

like image 151
A. Webb Avatar answered Oct 19 '25 21:10

A. Webb



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!