--- [EMAIL PROTECTED] wrote:
> Going into this statement on both Linux and Windows,
> the exact same values are in realvalue and in rounder:
> 
>    realvalue:  0xf333333333333000   0.94999999999999995559107901499373838
>    rounder:    0x3fa999999999999a   0.05000000000000000300000000000000000
> 
> Both machines execute the exact same 4 ix86 opcodes:
> 
>    fldl  <address of rounder>
>    fldt  <address of realvalue>
>    faddp %st,%st(1)
>    fstpt <address of realvalue>
> 
> But they end up with different answers.  Linux gets
> what I believe is the correct answer:
> 
>    realvalue:  0xfffffffffffffd00   0.99999999999999995836663657655662973
> 
> Windows gets the wrong answer:
> 
>    realvalue:  0x8000000000000000   1.00000000000000000000000000000000000
> 
> Can somebody please suggest to me what the difference is?
> Does windows somehow initialize the floating point hardware
> differently so that it does some kind of rounding on its own?
> Why should the same machine-language instructions generate a
> different answer on windows than it does on linux?

http://support.microsoft.com/kb/102555

 Microsoft Visual C++ runtime library provides default floating-point 
 exception handling and includes functions such as _controlfp for 
 determining and adjusting the floating-point hardware's rounding, 
 precision control, and exception handling behavior.

More info on fp:precise and _controlfp:

 http://msdn2.microsoft.com/en-us/library/aa289157(vs.71).aspx

double a, b, cLower, cUpper;
. . .
_controlfp( _RC_DOWN, _MCW_RC );    // round to -&infin;
cLower = a*b;
_controlfp( _RC_UP, _MCW_RC );    // round to +&infin;
cUpper = a*b;
_controlfp( _RC_NEAR, _MCW_RC );    // restore rounding mode



 
____________________________________________________________________________________
Now that's room service!  Choose from over 150,000 hotels
in 45,000 destinations on Yahoo! Travel to find your fit.
http://farechase.yahoo.com/promo-generic-14795097

-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------

Reply via email to