Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
114 changes: 57 additions & 57 deletions .gas-snapshot
Original file line number Diff line number Diff line change
@@ -1,36 +1,36 @@
DecimalFloatAbsTest:testAbsDeployed(bytes32) (runs: 5096, μ: 3602249, ~: 3602188)
DecimalFloatAddTest:testAddDeployed(bytes32,bytes32) (runs: 5096, μ: 3607708, ~: 3607769)
DecimalFloatCeilTest:testCeilDeployed(bytes32) (runs: 5096, μ: 3602256, ~: 3601851)
DecimalFloatConstantsTest:testEDeployed() (gas: 3601381)
DecimalFloatConstantsTest:testMaxNegativeValueDeployed() (gas: 3601370)
DecimalFloatConstantsTest:testMaxPositiveValueDeployed() (gas: 3601371)
DecimalFloatConstantsTest:testMinNegativeValueDeployed() (gas: 3601346)
DecimalFloatConstantsTest:testMinPositiveValueDeployed() (gas: 3601347)
DecimalFloatConstantsTest:testZeroDeployed() (gas: 3601414)
DecimalFloatDivTest:testDivDeployed(bytes32,bytes32) (runs: 5096, μ: 3609317, ~: 3609464)
DecimalFloatEqTest:testEqDeployed(bytes32,bytes32) (runs: 5096, μ: 3602580, ~: 3602506)
DecimalFloatFloorTest:testFloorDeployed(bytes32) (runs: 5096, μ: 3602038, ~: 3601849)
DecimalFloatFormatTest:testFormatDeployed(bytes32,uint256) (runs: 5096, μ: 3627947, ~: 3632554)
DecimalFloatFracTest:testFracDeployed(bytes32) (runs: 5096, μ: 3602436, ~: 3602399)
DecimalFloatFromFixedDecimalLosslessTest:testFromFixedDecimalLosslessDeployed(uint256,uint8) (runs: 5096, μ: 3603018, ~: 3602967)
DecimalFloatFromFixedDecimalLossyTest:testFromFixedDecimalLossyDeployed(uint256,uint8) (runs: 5096, μ: 3603497, ~: 3603434)
DecimalFloatGtTest:testGtDeployed(bytes32,bytes32) (runs: 5096, μ: 3602520, ~: 3602448)
DecimalFloatGteTest:testGteDeployed(bytes32,bytes32) (runs: 5096, μ: 3602509, ~: 3602434)
DecimalFloatInvTest:testInvDeployed(bytes32) (runs: 5096, μ: 3607724, ~: 3607783)
DecimalFloatIsZeroTest:testIsZeroDeployed(bytes32) (runs: 5096, μ: 3601691, ~: 3601691)
DecimalFloatLtTest:testLtDeployed(bytes32,bytes32) (runs: 5096, μ: 3602497, ~: 3602425)
DecimalFloatLteTest:testLteDeployed(bytes32,bytes32) (runs: 5096, μ: 3602553, ~: 3602478)
DecimalFloatMaxTest:testMaxDeployed(bytes32,bytes32) (runs: 5096, μ: 3602560, ~: 3602500)
DecimalFloatMinTest:testMinDeployed(bytes32,bytes32) (runs: 5096, μ: 3602558, ~: 3602498)
DecimalFloatMinusTest:testMinusDeployed(bytes32) (runs: 5096, μ: 3602356, ~: 3602357)
DecimalFloatMulTest:testMulDeployed(bytes32,bytes32) (runs: 5096, μ: 3606276, ~: 3607066)
DecimalFloatAbsTest:testAbsDeployed(bytes32) (runs: 5096, μ: 3622499, ~: 3622438)
DecimalFloatAddTest:testAddDeployed(bytes32,bytes32) (runs: 5096, μ: 3627945, ~: 3628019)
DecimalFloatCeilTest:testCeilDeployed(bytes32) (runs: 5096, μ: 3622503, ~: 3622101)
DecimalFloatConstantsTest:testEDeployed() (gas: 3621631)
DecimalFloatConstantsTest:testMaxNegativeValueDeployed() (gas: 3621620)
DecimalFloatConstantsTest:testMaxPositiveValueDeployed() (gas: 3621621)
DecimalFloatConstantsTest:testMinNegativeValueDeployed() (gas: 3621596)
DecimalFloatConstantsTest:testMinPositiveValueDeployed() (gas: 3621597)
DecimalFloatConstantsTest:testZeroDeployed() (gas: 3621664)
DecimalFloatDivTest:testDivDeployed(bytes32,bytes32) (runs: 5096, μ: 3629575, ~: 3629709)
DecimalFloatEqTest:testEqDeployed(bytes32,bytes32) (runs: 5096, μ: 3622830, ~: 3622756)
DecimalFloatFloorTest:testFloorDeployed(bytes32) (runs: 5096, μ: 3622291, ~: 3622099)
DecimalFloatFormatTest:testFormatDeployed(bytes32,uint256) (runs: 5096, μ: 3648201, ~: 3652804)
DecimalFloatFracTest:testFracDeployed(bytes32) (runs: 5096, μ: 3622685, ~: 3622649)
DecimalFloatFromFixedDecimalLosslessTest:testFromFixedDecimalLosslessDeployed(uint256,uint8) (runs: 5096, μ: 3623268, ~: 3623217)
DecimalFloatFromFixedDecimalLossyTest:testFromFixedDecimalLossyDeployed(uint256,uint8) (runs: 5096, μ: 3623745, ~: 3623684)
DecimalFloatGtTest:testGtDeployed(bytes32,bytes32) (runs: 5096, μ: 3622770, ~: 3622698)
DecimalFloatGteTest:testGteDeployed(bytes32,bytes32) (runs: 5096, μ: 3622761, ~: 3622684)
DecimalFloatInvTest:testInvDeployed(bytes32) (runs: 5096, μ: 3627984, ~: 3628033)
DecimalFloatIsZeroTest:testIsZeroDeployed(bytes32) (runs: 5096, μ: 3621941, ~: 3621941)
DecimalFloatLtTest:testLtDeployed(bytes32,bytes32) (runs: 5096, μ: 3622747, ~: 3622675)
DecimalFloatLteTest:testLteDeployed(bytes32,bytes32) (runs: 5096, μ: 3622804, ~: 3622728)
DecimalFloatMaxTest:testMaxDeployed(bytes32,bytes32) (runs: 5096, μ: 3622813, ~: 3622750)
DecimalFloatMinTest:testMinDeployed(bytes32,bytes32) (runs: 5096, μ: 3622808, ~: 3622748)
DecimalFloatMinusTest:testMinusDeployed(bytes32) (runs: 5096, μ: 3622606, ~: 3622607)
DecimalFloatMulTest:testMulDeployed(bytes32,bytes32) (runs: 5096, μ: 3626529, ~: 3627316)
DecimalFloatPackLosslessTest:testPackDeployed(int224,int32) (runs: 5096, μ: 170044, ~: 170045)
DecimalFloatParseTest:testParseDeployed(string) (runs: 5096, μ: 3604930, ~: 3604799)
DecimalFloatPowTest:testPowDeployed(bytes32,bytes32) (runs: 5096, μ: 3655950, ~: 3631589)
DecimalFloatSqrtTest:testSqrtDeployed(bytes32) (runs: 5096, μ: 3618648, ~: 3620391)
DecimalFloatSubTest:testSubDeployed(bytes32,bytes32) (runs: 5096, μ: 3608116, ~: 3608144)
DecimalFloatToFixedDecimalLosslessTest:testToFixedDecimalLosslessDeployed(bytes32,uint8) (runs: 5096, μ: 3603609, ~: 3603530)
DecimalFloatToFixedDecimalLossyTest:testToFixedDecimalLossyDeployed(bytes32,uint8) (runs: 5096, μ: 3603727, ~: 3604014)
DecimalFloatParseTest:testParseDeployed(string) (runs: 5096, μ: 3625179, ~: 3625048)
DecimalFloatPowTest:testPowDeployed(bytes32,bytes32) (runs: 5096, μ: 3675640, ~: 3651855)
DecimalFloatSqrtTest:testSqrtDeployed(bytes32) (runs: 5096, μ: 3639347, ~: 3640641)
DecimalFloatSubTest:testSubDeployed(bytes32,bytes32) (runs: 5096, μ: 3628369, ~: 3628394)
DecimalFloatToFixedDecimalLosslessTest:testToFixedDecimalLosslessDeployed(bytes32,uint8) (runs: 5096, μ: 3623883, ~: 3623780)
DecimalFloatToFixedDecimalLossyTest:testToFixedDecimalLossyDeployed(bytes32,uint8) (runs: 5096, μ: 3623973, ~: 3624264)
LibDecimalFloatAbsTest:testAbsMinValue(int32) (runs: 5038, μ: 5162, ~: 5162)
LibDecimalFloatAbsTest:testAbsNegative(int256,int32) (runs: 5096, μ: 10536, ~: 10754)
LibDecimalFloatAbsTest:testAbsNonNegative(int256,int32) (runs: 5096, μ: 9700, ~: 9316)
Expand Down Expand Up @@ -181,12 +181,12 @@ LibDecimalFloatImplementationInvTest:testInv0() (gas: 4452)
LibDecimalFloatImplementationInvTest:testInvGas0() (gas: 2248)
LibDecimalFloatImplementationInvTest:testInvReference(int256,int256) (runs: 5046, μ: 15312, ~: 15362)
LibDecimalFloatImplementationInvTest:testInvSlowGas0() (gas: 2560)
LibDecimalFloatImplementationLog10Test:testExactLogs() (gas: 1256416)
LibDecimalFloatImplementationLog10Test:testExactLookupsLog10() (gas: 1303855)
LibDecimalFloatImplementationLog10Test:testInterpolatedLookups() (gas: 1251083)
LibDecimalFloatImplementationLog10Test:testLog10One() (gas: 1484551)
LibDecimalFloatImplementationLog10Test:testSub1() (gas: 1252762)
LibDecimalFloatImplementationLookupLogTableValTest:testLookupLogTableVal() (gas: 1364784)
LibDecimalFloatImplementationLog10Test:testExactLogs() (gas: 1262946)
LibDecimalFloatImplementationLog10Test:testExactLookupsLog10() (gas: 1310385)
LibDecimalFloatImplementationLog10Test:testInterpolatedLookups() (gas: 1257613)
LibDecimalFloatImplementationLog10Test:testLog10One() (gas: 1491086)
LibDecimalFloatImplementationLog10Test:testSub1() (gas: 1259292)
LibDecimalFloatImplementationLookupLogTableValTest:testLookupLogTableVal() (gas: 1371314)
LibDecimalFloatImplementationMaximizeTest:testMaximizedEverything(int256,int256) (runs: 5096, μ: 9797, ~: 9799)
LibDecimalFloatImplementationMaximizeTest:testMaximizedExamples() (gas: 192873)
LibDecimalFloatImplementationMaximizeTest:testMaximizedIdempotent(int256,int256) (runs: 5096, μ: 10342, ~: 10306)
Expand All @@ -208,11 +208,11 @@ LibDecimalFloatImplementationMulTest:testMulOneZero() (gas: 4481)
LibDecimalFloatImplementationMulTest:testMulZero0Exponent() (gas: 4503)
LibDecimalFloatImplementationMulTest:testMulZeroAnyExponent(int64,int64) (runs: 5096, μ: 4704, ~: 4704)
LibDecimalFloatImplementationMulTest:testMulZeroOne() (gas: 4438)
LibDecimalFloatImplementationPow10Test:testExactLookupsPow10() (gas: 1280808)
LibDecimalFloatImplementationPow10Test:testExactPows() (gas: 1251875)
LibDecimalFloatImplementationPow10Test:testInterpolatedLookupsPower() (gas: 1283443)
LibDecimalFloatImplementationPow10Test:testNoRevert(int224,int32) (runs: 3632, μ: 1249376, ~: 1247204)
LibDecimalFloatImplementationPow10Test:testPow10One() (gas: 1557235)
LibDecimalFloatImplementationPow10Test:testExactLookupsPow10() (gas: 1287338)
LibDecimalFloatImplementationPow10Test:testExactPows() (gas: 1258404)
LibDecimalFloatImplementationPow10Test:testInterpolatedLookupsPower() (gas: 1290143)
LibDecimalFloatImplementationPow10Test:testNoRevert(int224,int32) (runs: 3594, μ: 1255821, ~: 1253779)
LibDecimalFloatImplementationPow10Test:testPow10One() (gas: 1563766)
LibDecimalFloatImplementationSubTest:testSubIsAdd(int256,int256,int256,int256) (runs: 5079, μ: 17124, ~: 17237)
LibDecimalFloatImplementationSubTest:testSubMinSignedValue(int256,int256,int256) (runs: 5096, μ: 15937, ~: 15910)
LibDecimalFloatImplementationSubTest:testSubOneFromMax() (gas: 7308)
Expand Down Expand Up @@ -242,7 +242,7 @@ LibDecimalFloatIsZeroTest:testIsZeroDeployed(bytes32) (runs: 5096, μ: 3899, ~:
LibDecimalFloatIsZeroTest:testIsZeroEqZero(bytes32) (runs: 5096, μ: 3527, ~: 3527)
LibDecimalFloatIsZeroTest:testIsZeroExamples(int32) (runs: 5096, μ: 4467, ~: 4467)
LibDecimalFloatIsZeroTest:testNotIsZero(int224,int32) (runs: 5039, μ: 3922, ~: 3922)
LibDecimalFloatLog10Test:testLog10Packed(bytes32) (runs: 5096, μ: 1643338, ~: 1265071)
LibDecimalFloatLog10Test:testLog10Packed(bytes32) (runs: 5096, μ: 1652377, ~: 1270929)
LibDecimalFloatLtTest:testLtExamples() (gas: 4015)
LibDecimalFloatLtTest:testLtGasAZero() (gas: 967)
LibDecimalFloatLtTest:testLtGasBZero() (gas: 1033)
Expand Down Expand Up @@ -289,19 +289,19 @@ LibDecimalFloatPackTest:testPackExponentOverflow(int256,int256) (runs: 5046, μ:
LibDecimalFloatPackTest:testPackNegativeExponentLossyZero(int256,int256) (runs: 5046, μ: 11957, ~: 12110)
LibDecimalFloatPackTest:testPackZero(int256) (runs: 5096, μ: 4469, ~: 4469)
LibDecimalFloatPackTest:testPartsRoundTrip(int224,int32) (runs: 5096, μ: 5484, ~: 5485)
LibDecimalFloatPow10Test:testPow10Packed(bytes32) (runs: 5096, μ: 1630425, ~: 1248021)
LibDecimalFloatPowTest:testNegativePowError(bytes32,bytes32) (runs: 5039, μ: 1235076, ~: 1235194)
LibDecimalFloatPowTest:testPowAZero(int32,bytes32) (runs: 3512, μ: 1234225, ~: 1234225)
LibDecimalFloatPowTest:testPowAZeroNegative(bytes32) (runs: 1609, μ: 1234609, ~: 1234609)
LibDecimalFloatPowTest:testPowBOne(bytes32) (runs: 5072, μ: 1539182, ~: 1539153)
LibDecimalFloatPowTest:testPowBZero(bytes32,int32) (runs: 5096, μ: 1233793, ~: 1233793)
LibDecimalFloatPowTest:testPows() (gas: 1635705)
LibDecimalFloatPowTest:testRoundTripFuzzPow(bytes32,bytes32) (runs: 5096, μ: 1281141, ~: 1255407)
LibDecimalFloatPowTest:testRoundTripSimple() (gas: 1874217)
LibDecimalFloatSqrtTest:testRoundTripFuzzSqrt(int224,int32) (runs: 5096, μ: 1297633, ~: 1300240)
LibDecimalFloatSqrtTest:testSqrt() (gas: 1297587)
LibDecimalFloatSqrtTest:testSqrtNegative(bytes32) (runs: 5078, μ: 1234789, ~: 1234907)
LibDecimalFloatSqrtTest:testSqrtRoundTrip() (gas: 1516148)
LibDecimalFloatPow10Test:testPow10Packed(bytes32) (runs: 5096, μ: 1640522, ~: 1254643)
LibDecimalFloatPowTest:testNegativePowError(bytes32,bytes32) (runs: 5047, μ: 1241606, ~: 1241724)
LibDecimalFloatPowTest:testPowAZero(int32,bytes32) (runs: 3513, μ: 1240754, ~: 1240754)
LibDecimalFloatPowTest:testPowAZeroNegative(bytes32) (runs: 1604, μ: 1241138, ~: 1241138)
LibDecimalFloatPowTest:testPowBOne(bytes32) (runs: 5081, μ: 1545717, ~: 1545688)
LibDecimalFloatPowTest:testPowBZero(bytes32,int32) (runs: 5096, μ: 1240322, ~: 1240322)
LibDecimalFloatPowTest:testPows() (gas: 1672051)
LibDecimalFloatPowTest:testRoundTripFuzzPow(bytes32,bytes32) (runs: 5096, μ: 1286713, ~: 1261888)
LibDecimalFloatPowTest:testRoundTripSimple() (gas: 1881202)
LibDecimalFloatSqrtTest:testRoundTripFuzzSqrt(int224,int32) (runs: 5096, μ: 1305156, ~: 1310935)
LibDecimalFloatSqrtTest:testSqrt() (gas: 1304231)
LibDecimalFloatSqrtTest:testSqrtNegative(bytes32) (runs: 5074, μ: 1241319, ~: 1241437)
LibDecimalFloatSqrtTest:testSqrtRoundTrip() (gas: 1522848)
LibDecimalFloatSubTest:testSubPacked(bytes32,bytes32) (runs: 5096, μ: 12228, ~: 12283)
LibFormatDecimalFloatCountSigFigs:testCountSigFigsExamples() (gas: 83596)
LibFormatDecimalFloatCountSigFigs:testCountSigFigsOne(int256) (runs: 5096, μ: 31877, ~: 31719)
Expand Down
6 changes: 6 additions & 0 deletions src/lib/implementation/LibDecimalFloatImplementation.sol
Original file line number Diff line number Diff line change
Expand Up @@ -888,6 +888,12 @@ library LibDecimalFloatImplementation {
lookupAntilogTableY1Y2(tablesDataContract, uint256(idx), interpolate);
}
if (interpolate) {
// This case causes an overflow below.
if (idx > 4 && scale == 1e76) {
scale = 1e75;
mantissaCoefficient /= 10;
}

(signedCoefficient, exponent) = unitLinearInterpolation(
idx * scale, mantissaCoefficient, (idx + 1) * scale, exponent, y1Coefficient, y2Coefficient, -4
);
Expand Down
2 changes: 2 additions & 0 deletions test/src/lib/LibDecimalFloat.pow.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@ contract LibDecimalFloatPowTest is LogTest {
(int256 signedCoefficientE, int256 exponentE) = LibDecimalFloat.FLOAT_E.unpack();
checkPow(signedCoefficientE, exponentE, 1, 0, signedCoefficientE, exponentE);
}

checkPow(1.0029e67, -67, 0.41e2, -2, 1.001e3, -3);
}

/// a^b is error for negative a and all b.
Expand Down