Fixed toDecimal() for large extended Int36 values (although there are still some very large values that trigger an error)
This commit is contained in:
parent
4d94b5812b
commit
048a10aac6
2 changed files with 27 additions and 13 deletions
|
|
@ -61,14 +61,18 @@ function test(sCmd, fREPL)
|
|||
var sOp = aTokens[0];
|
||||
var sNum1 = aTokens[1] && aTokens[1].replace(/,/g, '');
|
||||
var sNum2 = aTokens[2];
|
||||
if (!sNum2) {
|
||||
sNum2 = sNum1;
|
||||
sNum1 = undefined;
|
||||
}
|
||||
|
||||
var i36Op = new Int36(+sNum1);
|
||||
var i36Op = new Int36(+sNum2, +sNum1);
|
||||
|
||||
if (sNum1 != null) console.log(sOp + " " + dumpInt36(i36Op));
|
||||
if (sNum2 != null) console.log(sOp + " " + dumpInt36(i36Op));
|
||||
|
||||
switch(sOp) {
|
||||
case "set":
|
||||
i36Reg = new Int36(+sNum1, +sNum2);
|
||||
i36Reg = new Int36(i36Op);
|
||||
break;
|
||||
|
||||
case "add":
|
||||
|
|
@ -87,19 +91,12 @@ function test(sCmd, fREPL)
|
|||
i36Reg.div(i36Op);
|
||||
break;
|
||||
|
||||
case "dec":
|
||||
console.log("dec " + i36Reg.toDecimal());
|
||||
return true;
|
||||
|
||||
case "print":
|
||||
break;
|
||||
|
||||
default:
|
||||
console.log("unrecognized command: " + sCmd);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (sOp != "set") console.log(" = " + dumpInt36(i36Reg));
|
||||
console.log(" = " + dumpInt36(i36Reg));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -128,13 +125,11 @@ test("add 0");
|
|||
for (let i = 0; i <= 12; i++) {
|
||||
test("set 34,000,000,000");
|
||||
test("mul " + Math.pow(8, i));
|
||||
test("dec");
|
||||
}
|
||||
|
||||
for (let i = 0; i <= 12; i++) {
|
||||
test("set -34,000,000,000");
|
||||
test("mul " + Math.pow(8, i));
|
||||
test("dec");
|
||||
}
|
||||
|
||||
test("set 100");
|
||||
|
|
@ -143,6 +138,20 @@ test("div 3");
|
|||
test("set 4001");
|
||||
test("div -5");
|
||||
|
||||
test("set 0o037777777777 0o777777777777");
|
||||
|
||||
// test("set 0o047777777777 0o777777777777");
|
||||
// test("set 0o057777777777 0o777777777777");
|
||||
// test("set 0o067777777777 0o777777777777");
|
||||
// test("set 0o077777777777 0o777777777777");
|
||||
// test("set 0o177777777777 0o777777777777");
|
||||
// test("set 0o277777777777 0o777777777777");
|
||||
// test("set 0o377777777777 0o777777777777");
|
||||
// test("set 0o477777777777 0o777777777777");
|
||||
// test("set 0o577777777777 0o777777777777");
|
||||
// test("set 0o677777777777 0o777777777777");
|
||||
// test("set 0o777777777777 0o777777777777");
|
||||
|
||||
repl.start({
|
||||
prompt: "int36> ",
|
||||
input: process.stdin,
|
||||
|
|
|
|||
|
|
@ -151,6 +151,10 @@ class Int36 {
|
|||
}
|
||||
do {
|
||||
var quotient = i36Tmp.div(i36Div);
|
||||
if (i36Tmp.error) {
|
||||
s = "error";
|
||||
break;
|
||||
}
|
||||
var nMinDigits = (quotient? 10 : 1);
|
||||
i36Tmp.value = i36Tmp.remainder;
|
||||
do {
|
||||
|
|
@ -158,6 +162,7 @@ class Int36 {
|
|||
s = String.fromCharCode(0x30 + i36Tmp.remainder) + s;
|
||||
} while (--nMinDigits > 0 || i36Tmp.value);
|
||||
i36Tmp.value = quotient;
|
||||
i36Tmp.extended = 0;
|
||||
} while (i36Tmp.value);
|
||||
if (fNeg) s = '-' + s;
|
||||
return s;
|
||||
|
|
|
|||
Loading…
Reference in a new issue