private static BigInteger D2b(double d, int[] e, int[] bits)
{
byte[] dbl_bits;
int i;
int k;
int y;
int z;
int de;
long dBits = System.BitConverter.DoubleToInt64Bits(d);
int d0 = (int)((long)(((ulong)dBits) >> 32));
int d1 = (int)(dBits);
z = d0 & Frac_mask;
d0 &= unchecked((int)(0x7fffffff));
if ((de = ((int)(((uint)d0) >> Exp_shift))) != 0)
{
z |= Exp_msk1;
}
if ((y = d1) != 0)
{
dbl_bits = new byte[8];
k = Lo0bits(y);
y = (int)(((uint)y) >> k);
if (k != 0)
{
StuffBits(dbl_bits, 4, y | z << (32 - k));
z >>= k;
}
else
{
StuffBits(dbl_bits, 4, y);
}
StuffBits(dbl_bits, 0, z);
i = (z != 0) ? 2 : 1;
}
else
{
// JS_ASSERT(z);
dbl_bits = new byte[4];
k = Lo0bits(z);
z = (int)(((uint)z) >> k);
StuffBits(dbl_bits, 0, z);
k += 32;
i = 1;
}
if (de != 0)
{
e[0] = de - Bias - (P - 1) + k;
bits[0] = P - k;
}
else
{
e[0] = de - Bias - (P - 1) + 1 + k;
bits[0] = 32 * i - Hi0bits(z);
}
return new BigInteger(dbl_bits);
}