Skip to content

Commit a1ae543

Browse files
committed
Make log2 more readable
1 parent c8e9e3c commit a1ae543

File tree

1 file changed

+23
-24
lines changed

1 file changed

+23
-24
lines changed

contracts/utils/math/Math.sol

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -389,38 +389,37 @@ library Math {
389389
*/
390390
function log2(uint256 value) internal pure returns (uint256) {
391391
uint256 result = 0;
392-
uint256 isGt;
392+
uint256 exp;
393393
unchecked {
394-
isGt = boolToUint(value > 0xffffffffffffffffffffffffffffffff);
395-
value >>= isGt * 128;
396-
result += isGt * 128;
394+
exp = 128 * boolToUint(value > (1 << 128) - 1);
395+
value >>= exp;
396+
result += exp;
397397

398-
isGt = boolToUint(value > 0xffffffffffffffff);
399-
value >>= isGt * 64;
400-
result += isGt * 64;
398+
exp = 64 * boolToUint(value > (1 << 64) - 1);
399+
value >>= exp;
400+
result += exp;
401401

402-
isGt = boolToUint(value > 0xffffffff);
403-
value >>= isGt * 32;
404-
result += isGt * 32;
402+
exp = 32 * boolToUint(value > (1 << 32) - 1);
403+
value >>= exp;
404+
result += exp;
405405

406-
isGt = boolToUint(value > 0xffff);
407-
value >>= isGt * 16;
408-
result += isGt * 16;
406+
exp = 16 * boolToUint(value > (1 << 16) - 1);
407+
value >>= exp;
408+
result += exp;
409409

410-
isGt = boolToUint(value > 0xff);
411-
value >>= isGt * 8;
412-
result += isGt * 8;
410+
exp = 8 * boolToUint(value > (1 << 8) - 1);
411+
value >>= exp;
412+
result += exp;
413413

414-
isGt = boolToUint(value > 0xf);
415-
value >>= isGt * 4;
416-
result += isGt * 4;
414+
exp = 4 * boolToUint(value > (1 << 4) - 1);
415+
value >>= exp;
416+
result += exp;
417417

418-
isGt = boolToUint(value > 0x3);
419-
value >>= isGt * 2;
420-
result += isGt * 2;
418+
exp = 2 * boolToUint(value > (1 << 2) - 1);
419+
value >>= exp;
420+
result += exp;
421421

422-
isGt = boolToUint(value > 0x1);
423-
result += isGt;
422+
result += boolToUint(value > 1);
424423
}
425424
return result;
426425
}

0 commit comments

Comments
 (0)