Microsoft KB Archive/263715

= BUG: Compiler Generates Incorrect Code with Unsigned Integer Operand Greater Than 0x80000000 =

Article ID: 263715

Article Last Modified on 7/5/2005

-

APPLIES TO


 * Microsoft Visual C++ 6.0 Enterprise Edition
 * Microsoft Visual C++ 6.0 Professional Edition
 * Microsoft Visual C++ 6.0 Standard Edition

-



This article was previously published under Q263715



SYMPTOMS
The compiler may generate incorrect code for floating point binary expressions (multiply, add, divide and sub) where the second argument is an unsigned integer in the range 0x80000000 to 0xFFFFFFFF.



RESOLUTION
There are two ways to resolve this problem:


 * Assign the argument to a float before you use it in the expression.
 * Cast the argument to a double instead of a float.



STATUS
Microsoft has confirmed that this is a bug in the Microsoft products that are listed at the beginning of this article.



MORE INFORMATION
The following sample code demonstrates the bug, as well as the ways to work around it: //test.cpp // compiler option needed: /GX //test.cpp unsigned a=1,b=-2; int main { //PROBLEM: May produce an incorrect result. std::cout << (float)a /(float)b <<std::endl;
 * 1) include

//WORKAROUND 1: Create a temporary float. float b1=(float)b; std::cout << (float)a /(float)b1 <<std::endl;

//WORKAROUND 2: Cast to a double. std::cout << (float)a /(double)b <<std::endl;

return 0; } /* Program Output: -0.5 2.32831e-010 2.32831e-010

Keywords: kbbug kbcodegen kbcompiler KB263715

-

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

© Microsoft Corporation. All rights reserved.