Microsoft KB Archive/28855

= CINT/CLNG Integer Assignment Round x.5 to Nearest Even Integer =

Article ID: 28855

Article Last Modified on 8/16/2005

-

APPLIES TO


 * Microsoft Visual Basic 1.0 Standard Edition
 * Microsoft Visual Basic for MS-DOS
 * Microsoft QuickBasic 4.0
 * Microsoft QuickBASIC 4.0b
 * Microsoft QuickBasic 4.5 for MS-DOS
 * Microsoft BASIC Professional Development System 7.0
 * Microsoft BASIC Professional Development System 7.1
 * Microsoft BASIC Compiler 6.0
 * Microsoft BASIC Compiler 6.0b

-



This article was previously published under Q28855



SUMMARY
(Note that Microsoft QuickBasic for MS-DOS, versions 3.0 and earlier have no long integer format or CLNG function)

When a numeric expression ending in .5 is assigned to an integer variable, a compiled Basic program will round the expression to the nearest even integer. For example, .5 converts to 0, 1.5 converts to 2, 2.5 converts to 2, and 3.5 converts to 4.

This rounding to the nearest even integer occurs for the CINT and CLNG functions and for an integer division assigned to an integer or long integer variable. This behavior is a feature of the IEEE Floating Point Standard.



MORE INFORMATION
This type of integer rounding complies with the following IEEE standard:

&quot;If the difference between the unrounded operand and the rounded result is exactly one half, the rounded result is even&quot; (Section 5.5 of the &quot;IEEE Standard for Binary Floating-Point Arithmetic&quot;)

The purpose of this behavior is to prevent an average upward (or downward) bias as various calculations are rounded. If the number is always rounded up, there would be an upward bias in calculations. Rounding to the nearest even number averages out; therefore, no rounding bias occurs.

The compilers listed above store and manipulate numbers using IEEE format. This exclusive use of IEEE format for real numbers is necessary to enable compiled Basic to CALL routines written in FORTRAN, Pascal, and C, all of which use IEEE format.

QB.EXE (noncoprocessor) version 3.0 and QuickBasic for MS-DOS, versions 1.0, 1.01, 1.02, 2.0, and 2.01 all store numbers in Microsoft Binary Floating Point format (also known as MBF). Note that QB87.EXE, the coprocessor version of QuickBasic for MS-DOS, version 3.0, uses IEEE format. QuickBasic for MS-DOS, versions 1.x, 2.0, and 2.01 do not support IEEE (or 8087, 80287, or 80387) coprocessors.

Microsoft Binary format uses a standard different from that of IEEE for converting between floating point and integers. In particular, numbers with &quot;5&quot; as the least significant digit are always rounded up to the next integer. The result does not have to be an even number. Thus, the Microsoft Binary format has an upward rounding bias.

Note that QuickBasic for MS-DOS, versions 3.0 and earlier cannot make interlanguage CALLs to FORTRAN, Pascal, or C.

Listed below are two examples of the above rounding behavior. To execute these examples in VBDOS.EXE use the following steps:


 * 1) From the File menu, choose New Project.
 * 2) Copy the code example to the Code window.
 * 3) Press F5 to run the program.

Example 1
The following is an example of always rounding expressions ending in .5 to an even number by integer assignment: DEFINT A-Z INPUT &quot;Type a whole number (1,2,3,4,5,6,...)&quot;,INUM IRESULT=INUM/2 PRINT &quot;If INUM/2 ends in .5, it rounds/truncates to even number:&quot; PRINT IRESULT

Example 2
The following is an example of rounding of the CINT function: a=.5 b=1.0 c=1.5 d=2.0 e=2.5 cls print &quot;CINT (0.5) = &quot;; CINT(A) PRINT &quot;CINT (1.0) = &quot;; CINT(B) PRINT &quot;CINT (1.5) = &quot;; CINT(C) PRINT &quot;CINT (2.0) = &quot;; CINT(D) PRINT &quot;CINT (2.5) = &quot;; CINT(E) OUTPUT FROM: B.EXE 4.0 later | B.EXE 3.0, 2.01, 2.0 CINT (0.5) =          0           |         1 CINT (1.0) =          1           |         1 CINT (1.5) =          2           |         2 CINT (2.0) =          2           |         2 CINT (2.5) =          2           |         3

Additional query words: VBmsdos QuickBas

Keywords: KB28855

-

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

© Microsoft Corporation. All rights reserved.