diff --git a/.gas-snapshot b/.gas-snapshot index ee47992..afc2226 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -1,36 +1,36 @@ -DecimalFloatAbsTest:testAbsDeployed(bytes32) (runs: 5107, μ: 3265209, ~: 3265149) -DecimalFloatAddTest:testAddDeployed(bytes32,bytes32) (runs: 5107, μ: 3270677, ~: 3270734) -DecimalFloatCeilTest:testCeilDeployed(bytes32) (runs: 5107, μ: 3265188, ~: 3264812) -DecimalFloatConstantsTest:testEDeployed() (gas: 3264342) -DecimalFloatConstantsTest:testMaxNegativeValueDeployed() (gas: 3264331) -DecimalFloatConstantsTest:testMaxPositiveValueDeployed() (gas: 3264332) -DecimalFloatConstantsTest:testMinNegativeValueDeployed() (gas: 3264307) -DecimalFloatConstantsTest:testMinPositiveValueDeployed() (gas: 3264308) -DecimalFloatConstantsTest:testZeroDeployed() (gas: 3264375) -DecimalFloatDivTest:testDivDeployed(bytes32,bytes32) (runs: 5107, μ: 3272188, ~: 3272312) -DecimalFloatEqTest:testEqDeployed(bytes32,bytes32) (runs: 5107, μ: 3265542, ~: 3265467) -DecimalFloatFloorTest:testFloorDeployed(bytes32) (runs: 5107, μ: 3264990, ~: 3264810) -DecimalFloatFormatTest:testFormatDeployed(bytes32,uint256) (runs: 5107, μ: 3290710, ~: 3297072) -DecimalFloatFracTest:testFracDeployed(bytes32) (runs: 5107, μ: 3265394, ~: 3265360) -DecimalFloatFromFixedDecimalLosslessTest:testFromFixedDecimalLosslessDeployed(uint256,uint8) (runs: 5107, μ: 3265987, ~: 3265928) -DecimalFloatFromFixedDecimalLossyTest:testFromFixedDecimalLossyDeployed(uint256,uint8) (runs: 5107, μ: 3266477, ~: 3266395) -DecimalFloatGtTest:testGtDeployed(bytes32,bytes32) (runs: 5107, μ: 3265484, ~: 3265409) -DecimalFloatGteTest:testGteDeployed(bytes32,bytes32) (runs: 5107, μ: 3265470, ~: 3265395) -DecimalFloatInvTest:testInvDeployed(bytes32) (runs: 5107, μ: 3270643, ~: 3270704) -DecimalFloatIsZeroTest:testIsZeroDeployed(bytes32) (runs: 5107, μ: 3264652, ~: 3264652) -DecimalFloatLtTest:testLtDeployed(bytes32,bytes32) (runs: 5107, μ: 3265461, ~: 3265386) -DecimalFloatLteTest:testLteDeployed(bytes32,bytes32) (runs: 5107, μ: 3265514, ~: 3265439) -DecimalFloatMaxTest:testMaxDeployed(bytes32,bytes32) (runs: 5107, μ: 3265523, ~: 3265461) -DecimalFloatMinTest:testMinDeployed(bytes32,bytes32) (runs: 5107, μ: 3265521, ~: 3265459) -DecimalFloatMinusTest:testMinusDeployed(bytes32) (runs: 5107, μ: 3265317, ~: 3265318) -DecimalFloatMulTest:testMulDeployed(bytes32,bytes32) (runs: 5107, μ: 3269150, ~: 3269931) +DecimalFloatAbsTest:testAbsDeployed(bytes32) (runs: 5107, μ: 3420593, ~: 3420533) +DecimalFloatAddTest:testAddDeployed(bytes32,bytes32) (runs: 5107, μ: 3426033, ~: 3426118) +DecimalFloatCeilTest:testCeilDeployed(bytes32) (runs: 5107, μ: 3420569, ~: 3420196) +DecimalFloatConstantsTest:testEDeployed() (gas: 3419726) +DecimalFloatConstantsTest:testMaxNegativeValueDeployed() (gas: 3419715) +DecimalFloatConstantsTest:testMaxPositiveValueDeployed() (gas: 3419716) +DecimalFloatConstantsTest:testMinNegativeValueDeployed() (gas: 3419691) +DecimalFloatConstantsTest:testMinPositiveValueDeployed() (gas: 3419692) +DecimalFloatConstantsTest:testZeroDeployed() (gas: 3419759) +DecimalFloatDivTest:testDivDeployed(bytes32,bytes32) (runs: 5107, μ: 3427574, ~: 3427696) +DecimalFloatEqTest:testEqDeployed(bytes32,bytes32) (runs: 5107, μ: 3420925, ~: 3420851) +DecimalFloatFloorTest:testFloorDeployed(bytes32) (runs: 5107, μ: 3420375, ~: 3420194) +DecimalFloatFormatTest:testFormatDeployed(bytes32,uint256) (runs: 5107, μ: 3446095, ~: 3452456) +DecimalFloatFracTest:testFracDeployed(bytes32) (runs: 5107, μ: 3420778, ~: 3420744) +DecimalFloatFromFixedDecimalLosslessTest:testFromFixedDecimalLosslessDeployed(uint256,uint8) (runs: 5107, μ: 3421370, ~: 3421312) +DecimalFloatFromFixedDecimalLossyTest:testFromFixedDecimalLossyDeployed(uint256,uint8) (runs: 5107, μ: 3421859, ~: 3421779) +DecimalFloatGtTest:testGtDeployed(bytes32,bytes32) (runs: 5107, μ: 3420867, ~: 3420793) +DecimalFloatGteTest:testGteDeployed(bytes32,bytes32) (runs: 5107, μ: 3420853, ~: 3420779) +DecimalFloatInvTest:testInvDeployed(bytes32) (runs: 5107, μ: 3426029, ~: 3426088) +DecimalFloatIsZeroTest:testIsZeroDeployed(bytes32) (runs: 5107, μ: 3420036, ~: 3420036) +DecimalFloatLtTest:testLtDeployed(bytes32,bytes32) (runs: 5107, μ: 3420844, ~: 3420770) +DecimalFloatLteTest:testLteDeployed(bytes32,bytes32) (runs: 5107, μ: 3420897, ~: 3420823) +DecimalFloatMaxTest:testMaxDeployed(bytes32,bytes32) (runs: 5107, μ: 3420906, ~: 3420845) +DecimalFloatMinTest:testMinDeployed(bytes32,bytes32) (runs: 5107, μ: 3420904, ~: 3420843) +DecimalFloatMinusTest:testMinusDeployed(bytes32) (runs: 5107, μ: 3420701, ~: 3420702) +DecimalFloatMulTest:testMulDeployed(bytes32,bytes32) (runs: 5107, μ: 3424539, ~: 3425315) DecimalFloatPackLosslessTest:testPackDeployed(int224,int32) (runs: 5107, μ: 170044, ~: 170045) -DecimalFloatParseTest:testParseDeployed(string) (runs: 5107, μ: 3267890, ~: 3267759) -DecimalFloatPowTest:testPowDeployed(bytes32,bytes32) (runs: 5107, μ: 3279909, ~: 3278229) -DecimalFloatSqrtTest:testSqrtDeployed(bytes32) (runs: 5107, μ: 3279961, ~: 3279453) -DecimalFloatSubTest:testSubDeployed(bytes32,bytes32) (runs: 5107, μ: 3270985, ~: 3271059) -DecimalFloatToFixedDecimalLosslessTest:testToFixedDecimalLosslessDeployed(bytes32,uint8) (runs: 5107, μ: 3266619, ~: 3266502) -DecimalFloatToFixedDecimalLossyTest:testToFixedDecimalLossyDeployed(bytes32,uint8) (runs: 5107, μ: 3266715, ~: 3266986) +DecimalFloatParseTest:testParseDeployed(string) (runs: 5107, μ: 3423275, ~: 3423144) +DecimalFloatPowTest:testPowDeployed(bytes32,bytes32) (runs: 5107, μ: 3435330, ~: 3433613) +DecimalFloatSqrtTest:testSqrtDeployed(bytes32) (runs: 5107, μ: 3435367, ~: 3434837) +DecimalFloatSubTest:testSubDeployed(bytes32,bytes32) (runs: 5107, μ: 3426357, ~: 3426443) +DecimalFloatToFixedDecimalLosslessTest:testToFixedDecimalLosslessDeployed(bytes32,uint8) (runs: 5107, μ: 3422003, ~: 3421886) +DecimalFloatToFixedDecimalLossyTest:testToFixedDecimalLossyDeployed(bytes32,uint8) (runs: 5107, μ: 3422096, ~: 3422370) LibDecimalFloatAbsTest:testAbsMinValue(int32) (runs: 5107, μ: 5162, ~: 5162) LibDecimalFloatAbsTest:testAbsNegative(int256,int32) (runs: 5107, μ: 10527, ~: 10754) LibDecimalFloatAbsTest:testAbsNonNegative(int256,int32) (runs: 5107, μ: 9714, ~: 9463) @@ -79,9 +79,9 @@ LibDecimalFloatDecimalTest:testToFixedDecimalLossyTruncate(int256,int256,uint8) LibDecimalFloatDecimalTest:testToFixedDecimalLossyTruncateLossless() (gas: 14500) LibDecimalFloatDecimalTest:testToFixedDecimalLossyUnderflow(int256,int256,uint8) (runs: 5107, μ: 13738, ~: 13602) LibDecimalFloatDecimalTest:testToFixedDecimalLossyZero(int256,uint8) (runs: 5107, μ: 4575, ~: 4575) -LibDecimalFloatDivTest:testDivByNegativeOneFloat(int224,int32) (runs: 5107, μ: 361764, ~: 358393) -LibDecimalFloatDivTest:testDivByOneFloat(int224,int32) (runs: 5107, μ: 336335, ~: 333291) -LibDecimalFloatDivTest:testDivPacked(bytes32,bytes32) (runs: 5107, μ: 12706, ~: 12844) +LibDecimalFloatDivTest:testDivByNegativeOneFloat(int224,int32) (runs: 5107, μ: 361760, ~: 358393) +LibDecimalFloatDivTest:testDivByOneFloat(int224,int32) (runs: 5107, μ: 336347, ~: 333291) +LibDecimalFloatDivTest:testDivPacked(bytes32,bytes32) (runs: 5107, μ: 12720, ~: 12850) LibDecimalFloatEqTest:testEqPacked(bytes32,bytes32) (runs: 5107, μ: 5524, ~: 5450) LibDecimalFloatEqTest:testEqXNotYExponents(bytes32,bytes32) (runs: 5107, μ: 4341, ~: 4234) LibDecimalFloatEqTest:testEqZero(int32) (runs: 5107, μ: 5123, ~: 5123) @@ -155,15 +155,15 @@ LibDecimalFloatImplementationDivTest:testDiv1Over3Gas0() (gas: 2566) LibDecimalFloatImplementationDivTest:testDiv1Over3Gas10() (gas: 21216) LibDecimalFloatImplementationDivTest:testDiv1Over9Over1Over3() (gas: 16036) LibDecimalFloatImplementationDivTest:testDiv1e18Over3() (gas: 7233) -LibDecimalFloatImplementationDivTest:testDivBy1(int256,int256) (runs: 5107, μ: 366408, ~: 371759) -LibDecimalFloatImplementationDivTest:testDivByNegativeOneFloat(int256,int256) (runs: 5107, μ: 368911, ~: 374524) -LibDecimalFloatImplementationDivTest:testDivMaxPositiveValueDenominatorNotRevert(int256,int256) (runs: 5107, μ: 2595, ~: 2645) +LibDecimalFloatImplementationDivTest:testDivBy1(int256,int256) (runs: 5107, μ: 366516, ~: 371759) +LibDecimalFloatImplementationDivTest:testDivByNegativeOneFloat(int256,int256) (runs: 5107, μ: 369018, ~: 374524) +LibDecimalFloatImplementationDivTest:testDivMaxPositiveValueDenominatorNotRevert(int256,int256) (runs: 5107, μ: 2597, ~: 2645) LibDecimalFloatImplementationDivTest:testDivNegative1Over3() (gas: 7774) LibDecimalFloatImplementationDivTest:testDivOOMs5and2() (gas: 6676) LibDecimalFloatImplementationDivTest:testDivOOMsOverTen() (gas: 7614) LibDecimalFloatImplementationDivTest:testDivTenOverOOMs() (gas: 7573) -LibDecimalFloatImplementationDivTest:testDivZero(int256,int256) (runs: 5107, μ: 9942, ~: 9948) -LibDecimalFloatImplementationDivTest:testUnnormalizedThreesDiv0(int256,int256) (runs: 111, μ: 29912681, ~: 29825155) +LibDecimalFloatImplementationDivTest:testDivZero(int256,int256) (runs: 5107, μ: 9938, ~: 9948) +LibDecimalFloatImplementationDivTest:testUnnormalizedThreesDiv0(int256,int256) (runs: 111, μ: 29911409, ~: 29825155) LibDecimalFloatImplementationEqTest:testEqGasAZero() (gas: 430) LibDecimalFloatImplementationEqTest:testEqGasBZero() (gas: 473) LibDecimalFloatImplementationEqTest:testEqGasBothZero() (gas: 450) @@ -179,7 +179,7 @@ LibDecimalFloatImplementationEqTest:testEqXNotY(int256,int256,int256,int256) (ru LibDecimalFloatImplementationEqTest:testEqZero(int256,int256) (runs: 5107, μ: 3440, ~: 3440) LibDecimalFloatImplementationInvTest:testInv0() (gas: 4452) LibDecimalFloatImplementationInvTest:testInvGas0() (gas: 2248) -LibDecimalFloatImplementationInvTest:testInvReference(int256,int256) (runs: 5105, μ: 15281, ~: 15362) +LibDecimalFloatImplementationInvTest:testInvReference(int256,int256) (runs: 5105, μ: 15287, ~: 15355) LibDecimalFloatImplementationInvTest:testInvSlowGas0() (gas: 2560) LibDecimalFloatImplementationLog10Test:testExactLogs() (gas: 1268680) LibDecimalFloatImplementationLog10Test:testExactLookupsLog10() (gas: 1312843) @@ -210,7 +210,7 @@ LibDecimalFloatImplementationMulTest:testMulZeroOne() (gas: 4438) LibDecimalFloatImplementationPow10Test:testExactLookupsPow10() (gas: 1286051) LibDecimalFloatImplementationPow10Test:testExactPows() (gas: 1261212) LibDecimalFloatImplementationPow10Test:testInterpolatedLookupsPower() (gas: 1295117) -LibDecimalFloatImplementationPow10Test:testNoRevert(int224,int32) (runs: 5105, μ: 1261037, ~: 1258880) +LibDecimalFloatImplementationPow10Test:testNoRevert(int224,int32) (runs: 5105, μ: 1261081, ~: 1260769) LibDecimalFloatImplementationPow10Test:testPow10One() (gas: 1524458) LibDecimalFloatImplementationSubTest:testSubIsAdd(int256,int256,int256,int256) (runs: 5106, μ: 17105, ~: 17227) LibDecimalFloatImplementationSubTest:testSubMinSignedValue(int256,int256,int256) (runs: 5107, μ: 15928, ~: 15913) @@ -225,24 +225,23 @@ LibDecimalFloatImplementationUnabsUnsignedMulOrDivLossyTest:testUnabsUnsignedMul LibDecimalFloatImplementationUnabsUnsignedMulOrDivLossyTest:testUnabsUnsignedMulOrDivLossyPositive(uint256,uint256,uint256,int256) (runs: 5107, μ: 9103, ~: 9033) LibDecimalFloatImplementationUnabsUnsignedMulOrDivLossyTest:testUnabsUnsignedMulOrDivLossyPositiveOverflow(uint256,uint256,uint256,int256) (runs: 5107, μ: 11090, ~: 11086) LibDecimalFloatImplementationWithTargetExponentTest:testWithTargetExponentExamples() (gas: 13427) -LibDecimalFloatImplementationWithTargetExponentTest:testWithTargetExponentExponentEqual(int256,int256) (runs: 5107, μ: 3721, ~: 3721) -LibDecimalFloatImplementationWithTargetExponentTest:testWithTargetExponentLargerExponentOverflowRescaleRevert(int256,int256,int256) (runs: 5099, μ: 14476, ~: 14443) -LibDecimalFloatImplementationWithTargetExponentTest:testWithTargetExponentLargerExponentVeryLargeDiffRevert(int256,int256,int256) (runs: 5107, μ: 13324, ~: 13425) -LibDecimalFloatImplementationWithTargetExponentTest:testWithTargetExponentLargerTargetExponentNoRevert(int256,int256,int256) (runs: 5107, μ: 11694, ~: 11897) +LibDecimalFloatImplementationWithTargetExponentTest:testWithTargetExponentLargerExponentOverflowRescaleRevert(int256,int256,int256) (runs: 5100, μ: 14474, ~: 14443) +LibDecimalFloatImplementationWithTargetExponentTest:testWithTargetExponentLargerExponentVeryLargeDiffRevert(int256,int256,int256) (runs: 5107, μ: 13332, ~: 13610) +LibDecimalFloatImplementationWithTargetExponentTest:testWithTargetExponentLargerTargetExponentNoRevert(int256,int256,int256) (runs: 5107, μ: 11684, ~: 11740) LibDecimalFloatImplementationWithTargetExponentTest:testWithTargetExponentMaxOverflow(int256) (runs: 5107, μ: 3769, ~: 3769) -LibDecimalFloatImplementationWithTargetExponentTest:testWithTargetExponentSameExponentNoop(int256,int256) (runs: 5107, μ: 3676, ~: 3676) -LibDecimalFloatImplementationWithTargetExponentTest:testWithTargetExponentScaleDown(int256,int256,int256) (runs: 5107, μ: 12986, ~: 12947) -LibDecimalFloatImplementationWithTargetExponentTest:testWithTargetExponentScaleUpLargeDiffRevert(int256,int256,int256) (runs: 5107, μ: 13493, ~: 13593) -LibDecimalFloatImplementationWithTargetExponentTest:testWithTargetExponentScaleUpNotOverflow(int256,int256,int256) (runs: 5105, μ: 13617, ~: 13547) -LibDecimalFloatImplementationWithTargetExponentTest:testWithTargetExponentScaleUpOverflow(int256,int256,int256) (runs: 5098, μ: 14151, ~: 14132) -LibDecimalFloatImplementationWithTargetExponentTest:testWithTargetExponentSmallerExponentNoRevert(int256,int256,int256) (runs: 5104, μ: 13873, ~: 13668) -LibDecimalFloatImplementationWithTargetExponentTest:testWithTargetExponentTargetMoreThan76Larger(int256,int256,int256) (runs: 5107, μ: 12482, ~: 12667) -LibDecimalFloatInvTest:testInvMem(bytes32) (runs: 5107, μ: 11243, ~: 11322) +LibDecimalFloatImplementationWithTargetExponentTest:testWithTargetExponentSameExponentNoop(int256,int256) (runs: 5107, μ: 3721, ~: 3721) +LibDecimalFloatImplementationWithTargetExponentTest:testWithTargetExponentScaleDown(int256,int256,int256) (runs: 5107, μ: 12963, ~: 12925) +LibDecimalFloatImplementationWithTargetExponentTest:testWithTargetExponentScaleUpLargeDiffRevert(int256,int256,int256) (runs: 5107, μ: 13503, ~: 13803) +LibDecimalFloatImplementationWithTargetExponentTest:testWithTargetExponentScaleUpNotOverflow(int256,int256,int256) (runs: 5105, μ: 13616, ~: 13547) +LibDecimalFloatImplementationWithTargetExponentTest:testWithTargetExponentScaleUpOverflow(int256,int256,int256) (runs: 5098, μ: 14127, ~: 14110) +LibDecimalFloatImplementationWithTargetExponentTest:testWithTargetExponentSmallerExponentNoRevert(int256,int256,int256) (runs: 5103, μ: 13872, ~: 13668) +LibDecimalFloatImplementationWithTargetExponentTest:testWithTargetExponentTargetMoreThan76Larger(int256,int256,int256) (runs: 5107, μ: 12451, ~: 12552) +LibDecimalFloatInvTest:testInvMem(bytes32) (runs: 5107, μ: 11234, ~: 11322) LibDecimalFloatIsZeroTest:testIsZeroDeployed(bytes32) (runs: 5107, μ: 3899, ~: 3899) LibDecimalFloatIsZeroTest:testIsZeroEqZero(bytes32) (runs: 5107, μ: 3527, ~: 3527) LibDecimalFloatIsZeroTest:testIsZeroExamples(int32) (runs: 5107, μ: 4467, ~: 4467) LibDecimalFloatIsZeroTest:testNotIsZero(int224,int32) (runs: 5106, μ: 3922, ~: 3922) -LibDecimalFloatLog10Test:testLog10Packed(bytes32) (runs: 5107, μ: 1648353, ~: 1274589) +LibDecimalFloatLog10Test:testLog10Packed(bytes32) (runs: 5107, μ: 1654716, ~: 1275943) LibDecimalFloatLtTest:testLtExamples() (gas: 4015) LibDecimalFloatLtTest:testLtGasAZero() (gas: 967) LibDecimalFloatLtTest:testLtGasBZero() (gas: 1033) @@ -289,18 +288,18 @@ LibDecimalFloatPackTest:testPackExponentOverflow(int256,int256) (runs: 5105, μ: LibDecimalFloatPackTest:testPackNegativeExponentLossyZero(int256,int256) (runs: 5105, μ: 11952, ~: 12110) LibDecimalFloatPackTest:testPackZero(int256) (runs: 5107, μ: 4469, ~: 4469) LibDecimalFloatPackTest:testPartsRoundTrip(int224,int32) (runs: 5107, μ: 5484, ~: 5485) -LibDecimalFloatPow10Test:testPow10Packed(bytes32) (runs: 5107, μ: 1643107, ~: 1259111) +LibDecimalFloatPow10Test:testPow10Packed(bytes32) (runs: 5107, μ: 1642626, ~: 1259111) LibDecimalFloatPowTest:testNegativePowError(bytes32,bytes32) (runs: 5107, μ: 1248827, ~: 1248862) -LibDecimalFloatPowTest:testPowAZero(int32,bytes32) (runs: 5103, μ: 1246465, ~: 1246465) -LibDecimalFloatPowTest:testPowAZeroNegative(bytes32) (runs: 5097, μ: 1246849, ~: 1246849) +LibDecimalFloatPowTest:testPowAZero(int32,bytes32) (runs: 5105, μ: 1246465, ~: 1246465) +LibDecimalFloatPowTest:testPowAZeroNegative(bytes32) (runs: 5099, μ: 1246849, ~: 1246849) LibDecimalFloatPowTest:testPowBOne(bytes32) (runs: 5107, μ: 1551450, ~: 1551421) LibDecimalFloatPowTest:testPowBZero(bytes32,int32) (runs: 5107, μ: 1246055, ~: 1246055) LibDecimalFloatPowTest:testPows() (gas: 1325200) -LibDecimalFloatPowTest:testRoundTripFuzzPow(bytes32,bytes32) (runs: 5107, μ: 1266170, ~: 1261098) +LibDecimalFloatPowTest:testRoundTripFuzzPow(bytes32,bytes32) (runs: 5107, μ: 1266340, ~: 1261251) LibDecimalFloatPowTest:testRoundTripSimple() (gas: 1670404) -LibDecimalFloatSqrtTest:testRoundTripFuzzSqrt(int224,int32) (runs: 5107, μ: 1305674, ~: 1309661) +LibDecimalFloatSqrtTest:testRoundTripFuzzSqrt(int224,int32) (runs: 5107, μ: 1305456, ~: 1309267) LibDecimalFloatSqrtTest:testSqrt() (gas: 1300463) -LibDecimalFloatSqrtTest:testSqrtNegative(bytes32) (runs: 5107, μ: 1248766, ~: 1248834) +LibDecimalFloatSqrtTest:testSqrtNegative(bytes32) (runs: 5107, μ: 1248764, ~: 1248826) LibDecimalFloatSqrtTest:testSqrtRoundTrip() (gas: 1454921) LibDecimalFloatSubTest:testSubPacked(bytes32,bytes32) (runs: 5107, μ: 12226, ~: 12283) LibFormatDecimalFloatCountSigFigs:testCountSigFigsExamples() (gas: 83596) diff --git a/src/lib/implementation/LibDecimalFloatImplementation.sol b/src/lib/implementation/LibDecimalFloatImplementation.sol index 6ec305c..2a8d97e 100644 --- a/src/lib/implementation/LibDecimalFloatImplementation.sol +++ b/src/lib/implementation/LibDecimalFloatImplementation.sol @@ -227,6 +227,7 @@ library LibDecimalFloatImplementation { /// > The result is then rounded to precision digits, if necessary, according /// > to the rounding algorithm and taking into account the remainder from /// > the division. + //slither-disable-next-line cyclomatic-complexity function div(int256 signedCoefficientA, int256 exponentA, int256 signedCoefficientB, int256 exponentB) internal pure @@ -265,7 +266,84 @@ library LibDecimalFloatImplementation { scale = 1e75; adjustExponent = 75; } else { - // This is potentially quite a slow edge case. + if (signedCoefficientBAbs < 1e38) { + if (signedCoefficientBAbs < 1e19) { + if (signedCoefficientBAbs < 1e10) { + if (signedCoefficientBAbs < 1e5) { + scale = 1e5; + adjustExponent = 5; + } else { + scale = 1e10; + adjustExponent = 10; + } + } else { + if (signedCoefficientBAbs < 1e14) { + scale = 1e14; + adjustExponent = 14; + } else { + scale = 1e19; + adjustExponent = 19; + } + } + } else { + if (signedCoefficientBAbs < 1e28) { + if (signedCoefficientBAbs < 1e23) { + scale = 1e23; + adjustExponent = 23; + } else { + scale = 1e28; + adjustExponent = 28; + } + } else { + if (signedCoefficientBAbs < 1e33) { + scale = 1e33; + adjustExponent = 33; + } else { + scale = 1e38; + adjustExponent = 38; + } + } + } + } else { + if (signedCoefficientBAbs < 1e58) { + if (signedCoefficientBAbs < 1e48) { + if (signedCoefficientBAbs < 1e43) { + scale = 1e43; + adjustExponent = 43; + } else { + scale = 1e48; + adjustExponent = 48; + } + } else { + if (signedCoefficientBAbs < 1e53) { + scale = 1e53; + adjustExponent = 53; + } else { + scale = 1e58; + adjustExponent = 58; + } + } + } else { + if (signedCoefficientBAbs < 1e68) { + if (signedCoefficientBAbs < 1e63) { + scale = 1e63; + adjustExponent = 63; + } else { + scale = 1e68; + adjustExponent = 68; + } + } else { + if (signedCoefficientBAbs < 1e73) { + scale = 1e73; + adjustExponent = 73; + } else { + // Noop as we already have a starting scale. + } + } + } + } + + // Finalize the scale after the binary search. while (signedCoefficientBAbs < scale) { unchecked { scale /= 10;