Matematicheskiye_obosnovani.../lab1/add/8B.js
2025-01-29 16:04:11 +03:00

102 lines
5.4 KiB
JavaScript

import { S8_0, S8_1, S8_2, S8_3, S8_4, S8_5, S8_6, S8_7 } from "../symbol/S8.js"
/**
* @param { symbol } a
* @param { symbol } b
* @param { boolean } carry
* @returns { [value: symbol, carry: boolean] }
*/
export function add8B(a, b, carry) {
switch (a) {
case S8_0: switch (b) {
case S8_0: return carry ? [S8_1, false] : [S8_0, false];
case S8_1: return carry ? [S8_2, false] : [S8_1, false];
case S8_2: return carry ? [S8_3, false] : [S8_2, false];
case S8_3: return carry ? [S8_4, false] : [S8_3, false];
case S8_4: return carry ? [S8_5, false] : [S8_4, false];
case S8_5: return carry ? [S8_6, false] : [S8_5, false];
case S8_6: return carry ? [S8_7, false] : [S8_6, false];
case S8_7: return carry ? [S8_0, true ] : [S8_7, false];
default: throw new Error("unexpected symbol");
}
case S8_1: switch (b) {
case S8_0: return carry ? [S8_2, false] : [S8_1, false];
case S8_1: return carry ? [S8_3, false] : [S8_2, false];
case S8_2: return carry ? [S8_4, false] : [S8_3, false];
case S8_3: return carry ? [S8_5, false] : [S8_4, false];
case S8_4: return carry ? [S8_6, false] : [S8_5, false];
case S8_5: return carry ? [S8_7, false] : [S8_6, false];
case S8_6: return carry ? [S8_0, true ] : [S8_7, false];
case S8_7: return carry ? [S8_1, true ] : [S8_0, true ];
default: throw new Error("unexpected symbol");
}
case S8_2: switch (b) {
case S8_0: return carry ? [S8_3, false] : [S8_2, false];
case S8_1: return carry ? [S8_4, false] : [S8_3, false];
case S8_2: return carry ? [S8_5, false] : [S8_4, false];
case S8_3: return carry ? [S8_6, false] : [S8_5, false];
case S8_4: return carry ? [S8_7, false] : [S8_6, false];
case S8_5: return carry ? [S8_0, true ] : [S8_7, false];
case S8_6: return carry ? [S8_1, true ] : [S8_0, true ];
case S8_7: return carry ? [S8_2, true ] : [S8_1, true ];
default: throw new Error("unexpected symbol");
}
case S8_3: switch (b) {
case S8_0: return carry ? [S8_4, false] : [S8_3, false];
case S8_1: return carry ? [S8_5, false] : [S8_4, false];
case S8_2: return carry ? [S8_6, false] : [S8_5, false];
case S8_3: return carry ? [S8_7, false] : [S8_6, false];
case S8_4: return carry ? [S8_0, true ] : [S8_7, false];
case S8_5: return carry ? [S8_1, true ] : [S8_0, true ];
case S8_6: return carry ? [S8_2, true ] : [S8_1, true ];
case S8_7: return carry ? [S8_3, true ] : [S8_2, true ];
default: throw new Error("unexpected symbol");
}
case S8_4: switch (b) {
case S8_0: return carry ? [S8_5, false] : [S8_4, false];
case S8_1: return carry ? [S8_6, false] : [S8_5, false];
case S8_2: return carry ? [S8_7, false] : [S8_6, false];
case S8_3: return carry ? [S8_0, true ] : [S8_7, false];
case S8_4: return carry ? [S8_1, true ] : [S8_0, true ];
case S8_5: return carry ? [S8_2, true ] : [S8_1, true ];
case S8_6: return carry ? [S8_3, true ] : [S8_2, true ];
case S8_7: return carry ? [S8_4, true ] : [S8_3, true ];
default: throw new Error("unexpected symbol");
}
case S8_5: switch (b) {
case S8_0: return carry ? [S8_6, false] : [S8_5, false];
case S8_1: return carry ? [S8_7, false] : [S8_6, false];
case S8_2: return carry ? [S8_0, true ] : [S8_7, false];
case S8_3: return carry ? [S8_1, true ] : [S8_0, true ];
case S8_4: return carry ? [S8_2, true ] : [S8_1, true ];
case S8_5: return carry ? [S8_3, true ] : [S8_2, true ];
case S8_6: return carry ? [S8_4, true ] : [S8_3, true ];
case S8_7: return carry ? [S8_5, true ] : [S8_4, true ];
default: throw new Error("unexpected symbol");
}
case S8_6: switch (b) {
case S8_0: return carry ? [S8_7, false] : [S8_6, false];
case S8_1: return carry ? [S8_0, true ] : [S8_7, false];
case S8_2: return carry ? [S8_1, true ] : [S8_0, true ];
case S8_3: return carry ? [S8_2, true ] : [S8_1, true ];
case S8_4: return carry ? [S8_3, true ] : [S8_2, true ];
case S8_5: return carry ? [S8_4, true ] : [S8_3, true ];
case S8_6: return carry ? [S8_5, true ] : [S8_4, true ];
case S8_7: return carry ? [S8_6, true ] : [S8_5, true ];
default: throw new Error("unexpected symbol");
}
case S8_7: switch (b) {
case S8_0: return carry ? [S8_0, true ] : [S8_7, false];
case S8_1: return carry ? [S8_1, true ] : [S8_0, true ];
case S8_2: return carry ? [S8_2, true ] : [S8_1, true ];
case S8_3: return carry ? [S8_3, true ] : [S8_2, true ];
case S8_4: return carry ? [S8_4, true ] : [S8_3, true ];
case S8_5: return carry ? [S8_5, true ] : [S8_4, true ];
case S8_6: return carry ? [S8_6, true ] : [S8_5, true ];
case S8_7: return carry ? [S8_7, true ] : [S8_6, true ];
default: throw new Error("unexpected symbol");
}
default: throw new Error("unexpected symbol");
}
}