Remove real type

Bob Jones me at not.com
Fri Apr 23 01:13:43 PDT 2010


"Walter Bright" <newshound1 at digitalmars.com> wrote in message 
news:hqq3qv$2sp5$2 at digitalmars.com...
> Bob Jones wrote:
>> You can set the internal precision of the x87 unit to 32, 64 or 80 bits, 
>> it just defaults to 80, and as there's little if any performance 
>> difference between the 3 modes, thats how it's usualy set.
>
> Despite those settings, the fpu still holds intermediate calculations to 
> 80 bits. The only way to get it to round to the lower precision is to 
> write it out to memory then read it back in. This, of course, is 
> disastrously slow.

Not true. If you load from memory it will keep the precision of what it 
loads, but the results of any calculations will be rounded to the lower 
precision.

For example...

====

long double a = 1.0/3.0;
 long double b = 0.0;

SetCtrlWord(GetCtrlWord() & 0xFCFF); // Set single precision

__asm
{
    FLD  [a]            // ST(0) == +3.3333333333333331e-0001
    FADD [b]         // ST(0) == +3.3333334326744079e-0001
    FSTP ST(0)
}






More information about the Digitalmars-d mailing list