Walter Bright:
> I agree. The only reason to use float or double is to save on storage.

A little D1 program, that I compile with LDC:

import tango.stdc.stdio: printf;
import tango.stdc.stdlib: atof;
alias real FP;
void main() {
    FP x = atof("1.5");
    FP y = atof("2.5");    
    FP xy = x * y;
    printf("%lf\n", xy);
}


ldc -O3 -release -inline -output-s temp.d

FP = double:

_Dmain:
        subl    $36, %esp
        movl    $.str, (%esp)
        call    atof
        movl    $.str1, (%esp)
        fstpl   24(%esp)
        call    atof
        fstpl   16(%esp)
        movsd   24(%esp), %xmm0
        mulsd   16(%esp), %xmm0
        movsd   %xmm0, 4(%esp)
        movl    $.str2, (%esp)
        call    printf
        xorl    %eax, %eax
        addl    $36, %esp
        ret     $8

-------------------------

FP = real:

_Dmain:
        subl    $28, %esp
        movl    $.str, (%esp)
        call    atof
        fstpt   16(%esp)
        movl    $.str1, (%esp)
        call    atof
        fldt    16(%esp)
        fmulp   %st(1)
        fstpt   4(%esp)
        movl    $.str2, (%esp)
        call    printf
        xorl    %eax, %eax
        addl    $28, %esp
        ret     $8


If you use the real type you are forced to use X86 FPU, that is very 
inefficient if used by LDC.

Bye,
bearophile

Reply via email to