transmissions11 / solmate

Modern, opinionated, and gas optimized building blocks for smart contract development.
GNU Affero General Public License v3.0
3.87k stars 637 forks source link

wadExp function comments mistake #343

Open 0x-stan opened 1 year ago

0x-stan commented 1 year ago

https://github.com/transmissions11/solmate/blob/main/src/utils/SignedWadMath.sol#L93

// When the result is < 0.5 we return zero. This happens when
// x <= floor(log(0.5e18) * 1e18) ~ -42e18
if (x <= -42139678854452767551) return 0;

log(0.5e18) -> log(0.5e-18)

log(0.5e18) = 40.753384493332874 log(0.5e-18) = -42.13967885445277

image
transmissions11 commented 1 year ago

ah hm nice find!

recmo commented 1 year ago

Yeah, that should be x <= floor(log(0.5e-18) * 1e18) ~ -42e18

0x-stan commented 1 year ago

Another comments mistake found by @paco0x

// x is now in the range (-42, 136) * 1e18. Convert to (-42, 136) * 2**96
// for more intermediate precision and a binary basis. This base conversion
// is a multiplication by 1e18 / 2**96 = 5**18 / 2**78.
x = (x << 78) / 5**18;

should be 2**96 / 1e18 = 2**78 / 5**18

https://github.com/transmissions11/solmate/blob/main/src/utils/SignedWadMath.sol#L102