|
|
1.1 ! root 1: /* C compiler: VAX float/double decoding */ ! 2: ! 3: #include "c.h" ! 4: ! 5: struct real decode(ty, x) double x; { ! 6: struct real r; ! 7: ! 8: if (x == 0.0) ! 9: r.exp = r.msb = r.lsb = r.sign = 0; ! 10: else if (ty == D) { ! 11: struct d { unsigned fract1:7, exp:8, sign:1, fract2:16, ! 12: fract4:7, fract3:9, fract5:16; } *p = (struct d *) &x; ! 13: r.sign = p->sign; ! 14: r.exp = p->exp - 128 - 1; ! 15: r.msb = (p->fract1<<25) | (p->fract2<<9) | p->fract3; ! 16: r.lsb = (p->fract4<<25) | (p->fract5<<9); ! 17: } else { ! 18: float f = x; ! 19: struct f { unsigned fract1:7, exp:8, sign:1, fract2:16; } *p = (struct f *) &f; ! 20: r.sign = p->sign; ! 21: r.exp = p->exp - 128 - 1; ! 22: r.msb = (p->fract1<<25) | (p->fract2<<9); ! 23: r.lsb = 0; ! 24: } ! 25: return r; ! 26: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.