Search
View source code
Display the source code in std/bitmanip.d from which this page was generated on github.
Report a bug
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using local clone.

# Alias `std.bitmanip.DoubleRep`

Allows manipulating the fraction, exponent, and sign parts of a `double` separately. The definition is:

``` alias DoubleRep = std.bitmanip.FloatingPointRepresentation!(double); ```
``````struct DoubleRep
{
union
{
double value;
mixin(bitfields!(
ulong,   "fraction", 52,
ushort,  "exponent", 11,
bool,    "sign",      1));
}
enum uint bias = 1023, signBits = 1, fractionBits = 52, exponentBits = 11;
}``````

## Example

``````DoubleRep rep = {value: 0};
writeln(rep.fraction); // 0
writeln(rep.exponent); // 0
assert(!rep.sign);

rep.value = 42;
writeln(rep.fraction); // 1407374883553280
writeln(rep.exponent); // 1028
assert(!rep.sign);

rep.value = 10;
writeln(rep.fraction); // 1125899906842624
writeln(rep.exponent); // 1026
``````

## Example

``````DoubleRep rep = {value: 1};
writeln(rep.fraction); // 0
writeln(rep.exponent); // 1023
assert(!rep.sign);

rep.exponent = 1022;
writeln(rep.value); // 0.5

rep.exponent = 1026;
writeln(rep.value); // 8
``````

## Example

``````DoubleRep rep = {value: 1};
rep.value = -0.5;
writeln(rep.fraction); // 0
writeln(rep.exponent); // 1022
assert(rep.sign);

rep.value = -1. / 3;
writeln(rep.fraction); // 1501199875790165
writeln(rep.exponent); // 1021
assert(rep.sign);
``````

## Example

``````DoubleRep x;
x.value = 1.0;
assert(x.fraction == 0 && x.exponent == 1023 && !x.sign);
x.value = -0.5;
assert(x.fraction == 0 && x.exponent == 1022 && x.sign);
x.value = 0.5;
assert(x.fraction == 0 && x.exponent == 1022 && !x.sign);
``````

## Example

Writing

``````DoubleRep x;
x.fraction = 1125899906842624;
x.exponent = 1025;
x.sign = true;
writeln(x.value); // -5.0
``````

## Authors

Walter Bright, Andrei Alexandrescu, Jonathan M Davis, Alex RĂ¸nne Petersen, Damian Ziemba, Amaury SECHET