double d;
double d = 0;
static double b2d(Bigint *a, int32 *e){    ULong *xa, *xa0, w, y, z;    int32 k;    double d;#define d0 word0(d)#define d1 word1(d)#define set_d0(x) set_word0(d, x)#define set_d1(x) set_word1(d, x)    xa0 = a->x;    xa = xa0 + a->wds;    y = *--xa;#ifdef DEBUG    if (!y) Bug("zero y in b2d");#endif    k = hi0bits(y);    *e = 32 - k;    if (k < Ebits) {        set_d0(Exp_1 | y >> (Ebits - k));        w = xa > xa0 ? *--xa : 0;        set_d1(y << (32-Ebits + k) | w >> (Ebits - k));        goto ret_d;    }    z = xa > xa0 ? *--xa : 0;    if (k -= Ebits) {        set_d0(Exp_1 | y << k | z >> (32 - k));        y = xa > xa0 ? *--xa : 0;        set_d1(z << k | y >> (32 - k));    }    else {        set_d0(Exp_1 | y);        set_d1(z);    }  ret_d:#undef d0#undef d1#undef set_d0#undef set_d1    return d;}