Every library is scored in its own rounding direction: a result is wrong if it is not the integer that direction gives, if it reverts where the value fits, or if it returns a value where none fits. BlockulatorWad computes each function in FP19 and decides the last wei exactly.
Share wrong
| Fixed point | ||||||||
|---|---|---|---|---|---|---|---|---|
| function · share wrong | BWad | Solady | Solmate | PRB SD | PRB UD | snek | OZ | Uniswap |
mulWad | 0 | 13% | 13% | 0 | — | 0 | 0 | 0 |
mulWadUp | 0 | 13% | 13% | — | — | 0 | 0 | 0 |
divWad | 0 | 33% | 33% | 0 | — | 0 | 0 | 0 |
divWadUp | 0 | 33% | 33% | — | — | 0 | 0 | 0 |
sMulWad | 0 | 11% | 11% | 0 | — | — | — | — |
sMulWadDown | 0 | — | — | — | — | — | — | — |
sMulWadUp | 0 | — | — | — | — | — | — | — |
sDivWad | 0 | 34% | 34% | 0 | — | — | — | — |
sDivWadDown | 0 | — | — | — | — | — | — | — |
sDivWadUp | 0 | — | — | — | — | — | — | — |
sqrtWad | 0 | 0 | 23% | 23% | — | — | 23% | — |
sqrtWadUp | 0 | — | — | — | — | — | 23% | — |
cbrtWad | 0 | 0 | — | — | — | 23% | — | — |
cbrtWadUp | 0 | — | — | — | — | — | — | — |
expWad | 0 | 48% | 48% | 72% | 93% | 48% | — | — |
expWadUp | 0 | — | — | — | — | — | — | — |
lnWad | 0 | 24% | 24% | 98% | 98% | 24% | — | — |
lnWadUp | 0 | — | — | — | — | — | — | — |
log2Wad | 0 | — | — | 93% | 90% | — | — | — |
log2WadUp | 0 | — | — | — | — | — | — | — |
log10Wad | 0 | — | — | 88% | 90% | — | — | — |
log10WadUp | 0 | — | — | — | — | — | — | — |
powWad | 0 | 58% | 58% | 64% | 80% | — | — | — |
powWadUp | 0 | — | — | — | — | — | — | — |
lambertW0Wad | 0 | 28% | — | — | — | — | — | — |
lambertW0WadDown | 0 | — | — | — | — | — | — | — |
lambertW0WadUp | 0 | — | — | — | — | — | — | — |
Hover a cell for the counts: how many were wrong, how many reverted where the value fits, and the direction scored.
Worst error
| Fixed point | ||||||||
|---|---|---|---|---|---|---|---|---|
| function · worst, in wei | BWad | Solady | Solmate | PRB SD | PRB UD | snek | OZ | Uniswap |
mulWad | 0 | 0 | 0 | 0 | — | 0 | 0 | 0 |
mulWadUp | 0 | 0 | 0 | — | — | 0 | 0 | 0 |
divWad | 0 | 0 | 0 | 0 | — | 0 | 0 | 0 |
divWadUp | 0 | 0 | 0 | — | — | 0 | 0 | 0 |
sMulWad | 0 | 0 | 0 | 0 | — | — | — | — |
sMulWadDown | 0 | — | — | — | — | — | — | — |
sMulWadUp | 0 | — | — | — | — | — | — | — |
sDivWad | 0 | 0 | 0 | 0 | — | — | — | — |
sDivWadDown | 0 | — | — | — | — | — | — | — |
sDivWadUp | 0 | — | — | — | — | — | — | — |
sqrtWad | 0 | 0 | 0 | 0 | — | — | 0 | — |
sqrtWadUp | 0 | — | — | — | — | — | 0 | — |
cbrtWad | 0 | 0 | — | — | — | 1.00e+12 | — | — |
cbrtWadUp | 0 | — | — | — | — | — | — | — |
expWad | 0 | 6.16e+56 | 6.16e+56 | 2.08e+59 | 2.08e+59 | 6.16e+56 | — | — |
expWadUp | 0 | — | — | — | — | — | — | — |
lnWad | 0 | 1 | 1 | 27 | 27 | 1 | — | — |
lnWadUp | 0 | — | — | — | — | — | — | — |
log2Wad | 0 | — | — | 19 | 18 | — | — | — |
log2WadUp | 0 | — | — | — | — | — | — | — |
log10Wad | 0 | — | — | 14 | 14 | — | — | — |
log10WadUp | 0 | — | — | — | — | — | — | — |
powWad | 0 | 1.72e+64 | 1.72e+64 | 9.75e+64 | 2.55e+59 | — | — | — |
powWadUp | 0 | — | — | — | — | — | — | — |
lambertW0Wad | 0 | 1.54e+09 | — | — | — | — | — | — |
lambertW0WadDown | 0 | — | — | — | — | — | — | — |
lambertW0WadUp | 0 | — | — | — | — | — | — | — |
The largest distance from the exact integer over the values each library returned. A revert counts as wrong above, not here.
Gas
| Fixed point | ||||||||
|---|---|---|---|---|---|---|---|---|
| function · gas per call | BWad | Solady | Solmate | PRB SD | PRB UD | snek | OZ | Uniswap |
mulWad | 107 | 86 | 146 | 218 | — | 323 | 239 | 179 |
mulWadUp | 128 | 110 | 172 | — | — | 391 | 632 | 304 |
divWad | 103 | 87 | 146 | 242 | — | 323 | 239 | 179 |
divWadUp | 128 | 113 | 172 | — | — | 391 | 632 | 304 |
sMulWad | 142 | 126 | 131 | 481 | — | — | — | — |
sMulWadDown | 170 | — | — | — | — | — | — | — |
sMulWadUp | 162 | — | — | — | — | — | — | — |
sDivWad | 133 | 93 | 97 | 494 | — | — | — | — |
sDivWadDown | 168 | — | — | — | — | — | — | — |
sDivWadUp | 170 | — | — | — | — | — | — | — |
sqrtWad | 388 | 393 | 432 | 800 | — | — | 763 | — |
sqrtWadUp | 408 | — | — | — | — | — | 1,048 | — |
cbrtWad | 760 | 619 | — | — | — | 1,407 | — | — |
cbrtWadUp | 777 | — | — | — | — | — | — | — |
expWad | 2,357 | 430 | 430 | 2,731 | 2,635 | 604 | — | — |
expWadUp | 2,358 | — | — | — | — | — | — | — |
lnWad | 2,415 | 556 | 644 | 7,004 | 6,438 | 1,235 | — | — |
lnWadUp | 2,416 | — | — | — | — | — | — | — |
log2Wad | 2,160 | — | — | 6,660 | 6,306 | — | — | — |
log2WadUp | 2,161 | — | — | — | — | — | — | — |
log10Wad | 2,368 | — | — | 8,744 | 8,392 | — | — | — |
log10WadUp | 2,369 | — | — | — | — | — | — | — |
powWad | 4,762 | 1,275 | 1,363 | 9,913 | 9,323 | — | — | — |
powWadUp | 4,763 | — | — | — | — | — | — | — |
lambertW0Wad | 12,097 | 2,820 | — | — | — | — | — | — |
lambertW0WadDown | 12,096 | — | — | — | — | — | — | — |
lambertW0WadUp | 12,097 | — | — | — | — | — | — | — |
Median gas of the internal call on everyday inputs (exp of −10..10, ln of 0.001..1000, pow of 0.5..2 to −3..3, products and quotients of amounts up to 109 tokens). Full counts and the method: wad.md; data: wad.json.