Q58499: "Overflow" with Integer Division and MOD Operator; Workaround
Article: Q58499
Product(s): See article
Version(s): 4.00 4.00b 4.50
Operating System(s): MS-DOS
Keyword(s): ENDUSER | SR# S900113-13 B_BasicCom | mspl13_basic
Last Modified: 7-FEB-1990
The integer division operator (\) and the modulo arithmetic operator
(MOD) correctly produce an "Overflow" error if an operand is a
negative number less than -2,147,483,648 or a positive number greater
than +2,147,483,647 (outside the limits for long integers).
This information applies to Microsoft QuickBASIC Versions 4.00, 4.00b,
and 4.50 for MS-DOS, to Microsoft BASIC Compiler Versions 6.00 and
6.00b for MS-DOS and MS OS/2, and to Microsoft BASIC Professional
Development System (PDS) Version 7.00 for MS-DOS and MS OS/2.
The following program shows how to do integer division and modulo
arithmetic when the size of an operand causes overflow:
x# = 2147483648 ' numerator
y# = 123 ' denominator
x# = INT(x# + .5) ' round off the numerator
y# = INT(y# + .5) ' round off the denominator
PRINT FIX(x# / y#) ' Emulate integer division
PRINT x# - ( y# * FIX(x# / y#) ) ' Emulate modulo arithmetic
THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.
Copyright Microsoft Corporation 1986-2002.