floating point verification using is?

bearophile bearophileHUGS at lycos.com
Fri Dec 18 13:03:17 PST 2009


This may be better, I have not taken a look at the resulting asm yet:

import std.traits: isFloatingPoint;
import std.c.stdio: printf;

bool isInitNan(T)(T f) if (isFloatingPoint!T) {
    union FPInt {
        T f;
        ubyte[T.sizeof] a;
    }
    static FPInt fnan, fx;
    fx.f = f;
    return fnan.a == fx.a;
}

void main() {
    printf("%d\n", isInitNan(2.5));
    float x;
    printf("%d\n", isInitNan(x));
    x = 2.5;
    printf("%d\n", isInitNan(x));
}


More information about the Digitalmars-d-learn mailing list