Skip to content

Commit fc8dafc

Browse files
committed
Various rounding fixes
1 parent 0bf3923 commit fc8dafc

File tree

1 file changed

+23
-33
lines changed

1 file changed

+23
-33
lines changed

hyper.js

Lines changed: 23 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1365,7 +1365,13 @@ var Hyper
13651365
var data = value.$[3]
13661366
var diffPower = powerOfTenBig(DIGITSMINUSONE - digits)
13671367
var flooredData = (data / diffPower) * diffPower
1368-
value.$[3] = data < (flooredData + (diffPower >> 1n)) ? flooredData : (flooredData + diffPower)
1368+
data = data < (flooredData + (diffPower >> 1n)) ? flooredData : (flooredData + diffPower)
1369+
if (data >= BIGLIMIT) {
1370+
value.$[3] = data / 10n
1371+
value.$[2]++
1372+
} else {
1373+
value.$[3] = data
1374+
}
13691375
}
13701376
}
13711377
return value
@@ -1378,7 +1384,13 @@ var Hyper
13781384
var data = value.$[3]
13791385
var diffPower = powerOfTenBig(DIGITSMINUSONE - digits)
13801386
var flooredData = (data / diffPower) * diffPower
1381-
value.$[3] = data <= (flooredData + (diffPower >> 1n)) ? flooredData : (flooredData + diffPower)
1387+
data = data <= (flooredData + (diffPower >> 1n)) ? flooredData : (flooredData + diffPower)
1388+
if (data >= BIGLIMIT) {
1389+
value.$[3] = data / 10n
1390+
value.$[2]++
1391+
} else {
1392+
value.$[3] = data
1393+
}
13821394
}
13831395
}
13841396
return value
@@ -1395,7 +1407,13 @@ var Hyper
13951407
}
13961408
var diffPower = powerOfTenBig(DIGITSMINUSONE - digits)
13971409
var flooredData = (data / diffPower) * diffPower
1398-
value.$[3] = flooredData === data ? flooredData : (flooredData + diffPower)
1410+
data = flooredData === data ? flooredData : (flooredData + diffPower)
1411+
if (data >= BIGLIMIT) {
1412+
value.$[3] = data / 10n
1413+
value.$[2]++
1414+
} else {
1415+
value.$[3] = data
1416+
}
13991417
}
14001418
}
14011419
return value
@@ -1535,21 +1553,7 @@ var Hyper
15351553
* @returns {Hyper}
15361554
*/
15371555
Hyper.prototype.ceil = function (noClone) {
1538-
var value = noClone ? this : new Hyper(this)
1539-
if (value.$[1] === 0) {
1540-
var digits = value.$[2]
1541-
if (digits < HDIGITS) {
1542-
var data = value.$[3]
1543-
if (digits < 0) {
1544-
value.$ = data === 0n ? [0, 0, 0n] : [0, 0, BIGONE]
1545-
return value
1546-
}
1547-
var diffPower = powerOfTenBig(DIGITSMINUSONE - digits)
1548-
var flooredData = (data / diffPower) * diffPower
1549-
value.$[3] = flooredData === data ? flooredData : (flooredData + diffPower)
1550-
}
1551-
}
1552-
return value
1556+
return HyperCeil(this, noClone)
15531557
}
15541558

15551559
/**
@@ -1558,21 +1562,7 @@ var Hyper
15581562
* @returns {Hyper}
15591563
*/
15601564
Hyper.ceil = function (value) {
1561-
value = new HyperNumber(value)
1562-
if (value.$[1] === 0) {
1563-
var digits = value.$[2]
1564-
if (digits < HDIGITS) {
1565-
var data = value.$[3]
1566-
if (digits < 0) {
1567-
value.$ = data === 0n ? [0, 0, 0n] : [0, 0, BIGONE]
1568-
return value
1569-
}
1570-
var diffPower = powerOfTenBig(DIGITSMINUSONE - digits)
1571-
var flooredData = (data / diffPower) * diffPower
1572-
value.$[3] = flooredData === data ? flooredData : (flooredData + diffPower)
1573-
}
1574-
}
1575-
return value
1565+
return HyperCeil(new Hyper(value), true)
15761566
}
15771567

15781568
/**

0 commit comments

Comments
 (0)