Class new title: MachineDouble subclassof: Number fields: 'high low' declare: 'high8 low4 low8 high4 ' < t1 [high = t1 high  [low < t1 low] high < t1 high] asInt | t1 t2 [(high lshift: 8) lor: low] classInit [low4 _ 64. high4 _ 68] decreaseby: t1 | t2 [t2 _ low - t1. [t2 < 0  [high _ high - 1 land: 255]]. low _ t2 land: 255] extract | t1 [t1 _ low. low _ high. high _ [(low land: 128) = 0  [0] 255]. t1] gets: t1 mtimes: t2 | t3 t4 t5 t6 t7 t8 [t3 _ t1 lshift: 4. t4 _ t1 land: 15. t5 _ t2 lshift: 4. t6 _ t2 land: 15. low _ t6 * t4. high _ t5 * t3. t8 _ t5 * t4. t7 _ t8 + (t6 * t3). high _ high + (t7 lshift: 4). low _ ((t7 land: 15) lshift: 4) + low. low  256  [high _ high + 1. low _ low - 256]] high [high] high_ t1 [high _ t1] increaseby: t1 | t2 [t2 _ low + t1. [t2 > 255  [high _ high + 1 land: 255]]. low _ t2 land: 255] init [low _ 0. high _ 0] low [low] low_ t1 [low _ t1] mdiv: t1 | t2 [high > t1  [user notify: 'illegal MachineDouble division'] high < 64  [t2 _ high * 256 + low. high _ t2 \ t1. t2 / t1] high < 128  [t2 _ (high lshift: 2) + (low lshift: 6) - t1. high _ t2 lshift: 2. low _ low field: 38 _ t2. (self mdiv: t1) + 64] t2 _ (high lshift: 1) + (low lshift: 7) - t1. high _ t2 lshift: 1. low _ low field: 23 _ t2. (self mdiv: t1) + 128] printon: t1 [t1 append: '[MachineDouble 0'. high printon: t1 base: 8. t1 append: ' 0'. low printon: t1 base: 8. t1 append: ']']