code: private FDBigInt doubleToBigInt(double dval) {
          long lbits = Double.doubleToLongBits(dval) & ~signMask;
          int binexp = (int) (lbits >>> expShift);
          lbits &= fractMask;
          if (binexp > 0) {
              lbits |= fractHOB;
          } else {
              assert lbits != 0L : lbits; // doubleToBigInt(0.0)
              binexp += 1;
              while ((lbits & fractHOB) == 0L) {
                  lbits <<= 1;
                  binexp -= 1;
              }
          }
          binexp -= expBias;
          int nbits = countBits(lbits);
          /*
           * We now know where the high-order 1 bit is, and we know how many there
           * are.
           */
          int lowOrderZeros = expShift + 1 - nbits;
          lbits >>>= lowOrderZeros;
  
          bigIntExp = binexp + 1 - nbits;
          bigIntNBits = nbits;
          return new FDBigInt(lbits);
      }
docs: /*
  Make a floating double into a FDBigInt. This could also be structured as
  a FDBigInt constructor, but we'd have to build a lot of knowledge about
  floating-point representation into it, and we don't want to.
  
  AS A SIDE EFFECT, THIS METHOD WILL SET THE INSTANCE VARIABLES bigIntExp
  and bigIntNBits