private double NonZeroUniform()
{
var b = new byte[7];
long lb = 0;
do {
this.valueIrg.GetBytes(b, 0, 7);
lb = b[0] & 0xffL;
lb |= (b[1] & 0xffL) << 8;
lb |= (b[2] & 0xffL) << 16;
lb |= (b[3] & 0xffL) << 24;
lb |= (b[4] & 0xffL) << 32;
lb |= (b[5] & 0xffL) << 40;
lb |= (b[6] & 0xfL) << 48;
} while (lb == 0);
lb |= 0x3ffL << 52;
return BitConverter.Int64BitsToDouble(lb) - 1.0;
}