spir wrote:

> Is there somewhere a (clear) doc about float/double internals?

A very good read is:

  http://digitalmars.com/d/2.0/d-floating-point.html

> Some more particuliar questions:
>
> What is the internal bit layout? (mantissa, sign, exponent)

IEEE floating point format. This page has links to different representations:

  http://en.wikipedia.org/wiki/Ieee_floating_point

Specifically:

  http://en.wikipedia.org/wiki/Single_precision_floating-point_format
  http://en.wikipedia.org/wiki/Double_precision_floating-point_format

> What are the values used to represent thingies like NaNs, inf, error?
> (Or are there not represented as values?)

They are available on the documents above.

> How would you get a float's integral and fractional parts without
> performing arithmetic? (I think at bit ops, indeed)

Here is a function with endianness "issues" that I had used with different types:

import std.stdio;

void display_bytes(T)(ref T variable)
{
    const ubyte * begin = cast(ubyte*)&variable;

    writefln("type          : %s", T.stringof);
    writefln("value         : %s", variable);
    writefln("address       : %s", begin);
    writef(  "representation: ");

    foreach (p; begin .. begin + T.sizeof) {
        writef("%02x ", *p);
    }

    writeln();
    writeln();
}

void main()
{
    auto d_nan = double.nan;
    auto d_inf = double.infinity;
    display_bytes(d_nan);
    display_bytes(d_inf);
}

Ali

Reply via email to