updated percentageMath

This commit is contained in:
emilio 2020-10-28 11:47:01 +01:00
parent 763220c2b9
commit 064af06385

View File

@ -54,15 +54,13 @@ library WadRayMath {
* @return the result of a*b, in wad * @return the result of a*b, in wad
**/ **/
function wadMul(uint256 a, uint256 b) internal pure returns (uint256) { function wadMul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) { if (a == 0 || b == 0) {
return 0; return 0;
} }
uint256 result = a * b + halfWAD; require(a <= (type(uint256).max-halfWAD)/b, Errors.MULTIPLICATION_OVERFLOW);
require(result >= halfWAD && (result - halfWAD) / a == b, Errors.MULTIPLICATION_OVERFLOW); return (a * b + halfWAD) / WAD;
return result / WAD;
} }
/** /**
@ -73,14 +71,11 @@ library WadRayMath {
**/ **/
function wadDiv(uint256 a, uint256 b) internal pure returns (uint256) { function wadDiv(uint256 a, uint256 b) internal pure returns (uint256) {
require(b != 0, Errors.DIVISION_BY_ZERO); require(b != 0, Errors.DIVISION_BY_ZERO);
uint256 halfB = b / 2; uint256 halfB = b / 2;
uint256 result = a * WAD + halfB; require(a <= (type(uint256).max-halfB)/WAD, Errors.MULTIPLICATION_OVERFLOW);
require(result >= halfB && (result - halfB) / WAD == a, Errors.MULTIPLICATION_OVERFLOW); return (a * WAD + halfB) / b;
return result / b;
} }
/** /**
@ -90,15 +85,14 @@ library WadRayMath {
* @return the result of a*b, in ray * @return the result of a*b, in ray
**/ **/
function rayMul(uint256 a, uint256 b) internal pure returns (uint256) { function rayMul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) { if (a == 0 || b == 0) {
return 0; return 0;
} }
uint256 result = a * b + halfRAY; require(a <= (type(uint256).max-halfRAY)/b, Errors.MULTIPLICATION_OVERFLOW);
require(result >= halfRAY && (result - halfRAY) / a == b, Errors.MULTIPLICATION_OVERFLOW); return (a * b + halfRAY) / RAY;
return result / RAY;
} }
/** /**
@ -109,14 +103,11 @@ library WadRayMath {
**/ **/
function rayDiv(uint256 a, uint256 b) internal pure returns (uint256) { function rayDiv(uint256 a, uint256 b) internal pure returns (uint256) {
require(b != 0, Errors.DIVISION_BY_ZERO); require(b != 0, Errors.DIVISION_BY_ZERO);
uint256 halfB = b / 2; uint256 halfB = b / 2;
uint256 result = a * RAY + halfB; require(a <= (type(uint256).max-halfB)/RAY, Errors.MULTIPLICATION_OVERFLOW);
require(result >= halfB && (result - halfB) / RAY == a, Errors.MULTIPLICATION_OVERFLOW); return (a * RAY + halfB) / b;
return result / b;
} }
/** /**