Rhino.DToA.D2b C# (CSharp) Method

D2b() private static method

private static D2b ( double d, int e, int bits ) : System.Numerics.BigInteger
d double
e int
bits int
return System.Numerics.BigInteger
		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);
		}