Re: about float double

2011-01-19 Thread bearophile
spir:

 Is there somewhere a (clear) doc about float/double internals?
 Some more particuliar questions:
 
 What is the internal bit layout? (mantissa, sign, exponent)

There is the real type too (= 10 bytes).

Bye,
bearophile


Re: about float double

2011-01-19 Thread dennis luehring

Is there somewhere a (clear) doc about float/double internals?
Some more particuliar questions:

What is the internal bit layout? (mantissa, sign, exponent)

Can I assume the integral range is [-2^(m-1) .. 2^�m-1)-1], where m is
the number of mantissa bits?

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

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


Wikipedia is very informative

and the phobos math implementation is a very good source for the bit ops 
stuff


http://www.dsource.org/projects/phobos/browser/trunk/phobos/std/math.d


about float double

2011-01-18 Thread spir

Hello,


Is there somewhere a (clear) doc about float/double internals?
Some more particuliar questions:

What is the internal bit layout? (mantissa, sign, exponent)

Can I assume the integral range is [-2^(m-1) .. 2^⁽m-1)-1], where m is 
the number of mantissa bits?


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


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



Denis
_
vita es estrany
spir.wikidot.com



Re: about float double

2011-01-18 Thread Ali Çehreli

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