feat(libraries): add constant-product and q112 fixed-point math
This commit is contained in:
1 parent
2214801143
commit
4b7a996e41
2 files changed
+40
No files matched your search
@@ -0,0 +1,23 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
pragma solidity 0.8.36;
|
||||
|
||||
/// @title Math helpers for the constant-product core.
|
||||
library Math {
|
||||
function min(uint256 x, uint256 y) internal pure returns (uint256) {
|
||||
return x < y ? x : y;
|
||||
}
|
||||
|
||||
/// @notice Babylonian integer square root.
|
||||
function sqrt(uint256 y) internal pure returns (uint256 z) {
|
||||
if (y > 3) {
|
||||
z = y;
|
||||
uint256 x = y / 2 + 1;
|
||||
while (x < z) {
|
||||
z = x;
|
||||
x = (y / x + x) / 2;
|
||||
}
|
||||
} else if (y != 0) {
|
||||
z = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
pragma solidity 0.8.36;
|
||||
|
||||
/// @title Fixed point unsigned Q112.112, used for price accumulators.
|
||||
library UQ112x112 {
|
||||
uint224 constant q112 = 2 ** 112;
|
||||
|
||||
function encode(uint112 y) internal pure returns (uint224 z) {
|
||||
unchecked {
|
||||
z = uint224(y) * q112;
|
||||
}
|
||||
}
|
||||
|
||||
function uqdiv(uint224 x, uint112 y) internal pure returns (uint224 z) {
|
||||
z = x / uint224(y);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user