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

102 lines
2.6 KiB
JavaScript

/**
* @import { Num } from "./num.js"
*/
import { S16_0, S16_1, S16_2, S16_3, S16_4, S16_5, S16_6, S16_7, S16_8, S16_9, S16_A, S16_B, S16_C, S16_D, S16_E, S16_F } from "./symbol/S16.js"
import { S8_0, S8_1, S8_2, S8_3, S8_4, S8_5, S8_6, S8_7 } from "./symbol/S8.js"
import { S2_0, S2_1 } from "./symbol/S2.js"
import { S10_0, S10_1, S10_2, S10_3, S10_4, S10_5, S10_6, S10_7, S10_8, S10_9 } from "./symbol/S10.js"
import { kBuffer } from "./num.js"
/**
* @param { Num } a
*/
function neg16(a) {
const { [kBuffer]: buff } = a;
switch (buff[buff.length - 1]) {
case S16_0: return false;
case S16_1: return false;
case S16_2: return false;
case S16_3: return false;
case S16_4: return false;
case S16_5: return false;
case S16_6: return false;
case S16_7: return false;
case S16_8: return true;
case S16_9: return true;
case S16_A: return true;
case S16_B: return true;
case S16_C: return true;
case S16_D: return true;
case S16_E: return true;
case S16_F: return true;
default: throw new Error("unexpected symbol");
}
}
/**
* @param { Num } a
*/
function neg8(a) {
const { [kBuffer]: buff } = a;
switch (buff[buff.length - 1]) {
case S8_0: return false;
case S8_1: return false;
case S8_2: return false;
case S8_3: return false;
case S8_4: return true;
case S8_5: return true;
case S8_6: return true;
case S8_7: return true;
default: throw new Error("unexpected symbol");
}
}
/**
* @param { Num } a
*/
function neg2(a) {
const { [kBuffer]: buff } = a;
switch (buff[buff.length - 1]) {
case S2_0: return false;
case S2_1: return true;
default: throw new Error("unexpected symbol");
}
}
/**
* @param { Num } a
*/
function neg10(a) {
const { [kBuffer]: buff } = a;
switch (buff[buff.length - 1]) {
case S10_0: return false;
case S10_1: return false;
case S10_2: return false;
case S10_3: return false;
case S10_4: return false;
case S10_5: return true;
case S10_6: return true;
case S10_7: return true;
case S10_8: return true;
case S10_9: return true;
default: throw new Error("unexpected symbol");
}
}
/**
* @param { Num } a
*/
export function neg(a) {
switch (a.radix) {
case 2: return neg2(a);
case 8: return neg8(a);
case 16: return neg16(a);
case 10: return neg10(a);
default: throw new Error(`unsupported radix (${a.radix})`);
}
}