Skip to main content
Solidity: >=0.4.0

Overview

Provides mulDiv that calculates floor(a × b / denominator) using 512-bit intermediate precision, preventing “phantom overflow” (intermediate product > 256 bits) without ever losing accuracy. Ideal for fixed-point math, percentage unlocks, price ratios, or any on-chain computation where exact division is required. Credits: Remco Bloemen under MIT license https://xn—2-umb.com/21/muldiv

Functions

mulDiv

function mulDiv(
    uint256 a,
    uint256 b,
    uint256 denominator
) internal pure returns (uint256 result)
Params
NameTypeDescription
auint256multiplicand
buint256multiplier
denominatoruint256divisor (must be > 0 and > prod1)
Returns
TypeDescription
uint256floor(a × b / denominator) with full precision
Reverts: if denominator == 0 or final result > type(uint256).max