The information in this article applies to:
SYMPTOMSThe program below fails when compiled with default optimizations with C 6.x and with any optimizations except /Op under the later versions of the compiler. The program prints the following with optimizations enabled:
However, if compiled with /Od, the following is printed:
The problem seems to be in the conversion of the double to int; the
rounding apparently is done incorrectly.
CAUSE
When the code is optimized, the result of the division is kept on the
floating-point stack rather than being stored into memory and reloaded
onto the stack. This causes precision problems, because the numbers on
the stack are stored in extended (10- byte) precision, while doubles
in memory are stored using 8 bytes. RESOLUTION
To avoid this problem, use the /Op option when compiling. The /Op
switch forces in-memory storage of intermediate results. /Op can be
combined with other optimizations (for example, /Oxp). MORE INFORMATIONSample Code
Additional query words: 1.00 1.50 6.00 6.00a 6.00ax 7.00 8.00 8.00c
Keywords : kb16bitonly |
Last Reviewed: January 4, 2000 © 2000 Microsoft Corporation. All rights reserved. Terms of Use. |