Optimized gas costs in ceilDiv (#4553)

This commit is contained in:
carter-ya
2023-11-23 23:31:14 +08:00
committed by GitHub
parent 0950532d9a
commit e5fb718d40
3 changed files with 18 additions and 6 deletions

View File

@ -110,8 +110,14 @@ library Math {
return a / b;
}
// (a + b - 1) / b can overflow on addition, so we distribute.
return a == 0 ? 0 : (a - 1) / b + 1;
// The following calculation ensures accurate ceiling division without overflow.
// Since a is non-zero, (a - 1) / b will not overflow.
// The largest possible result occurs when (a - 1) / b is type(uint256).max,
// but the largest value we can obtain is type(uint256).max - 1, which happens
// when a = type(uint256).max and b = 1.
unchecked {
return a == 0 ? 0 : (a - 1) / b + 1;
}
}
/**