Microsoft KB Archive/42469

= FOR...NEXT with Floating-Point Counter May Not Execute Fully =

Article ID: 42469

Article Last Modified on 11/21/2006

-

APPLIES TO


 * Microsoft QuickBasic 4.0
 * Microsoft QuickBASIC 4.0b
 * Microsoft QuickBasic 4.5 for MS-DOS
 * Microsoft BASIC Compiler 6.0
 * Microsoft BASIC Compiler 6.0b
 * Microsoft BASIC Professional Development System 7.0

-



This article was previously published under Q42469



SUMMARY
Because of the nature of the IEEE floating-point format, using a floating-point counter (single or double precision) in a FOR NEXT loop can result in the loop being executed one fewer time than anticipated. Using an integer or long integer instead of floating point for the loop counter is the only way to guarantee that all iterations will execute.

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 PDS Version 7.00 for MS-DOS and MS OS/2.



MORE INFORMATION
The following is an example: DEFSNG A-Z FOR x = 0 to .8 step .2 PRINT x&quot; &quot;; NEXT x This will generate the following results:

0 .2 .4 .600000000000001

Note that due to the rounding error in the fourth value, the loop counter will be greater than .8 on the next iteration, and the loop will execute only four times instead of the expected five times.

This IEEE rounding behavior occurs in Microsoft QuickBasic Versions 4.00, 4.00b, and 4.50, in the Basic compiler Versions 6.00 and 6.00b, and in Basic PDS 7.00.

In most cases, the rounding differences will be minimal when the variables and numbers involved are double precision. Changing the first line of the example program to the following will allow the loop to properly execute five times: DEFDBL A-Z

Additional query words: QuickBas BasicCom

Keywords: KB42469

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.