# Math

{% hint style="info" %}
**Source:** `src/fira_bonding/libraries/math/PMath.sol`, `src/fira_bonding/libraries/math/LogExpMath.sol`
{% endhint %}

## PMath

Core fixed-point math used throughout the protocol. Constants: `ONE = 1e18`, `IONE = int256(1e18)`.

### Key operations

| Function                | Description                           | Rounding                            |
| ----------------------- | ------------------------------------- | ----------------------------------- |
| `mulDown(a, b)`         | `(a × b) / 1e18`                      | Toward zero (conservative for user) |
| `divDown(a, b)`         | `(a × 1e18) / b`                      | Toward zero                         |
| `rawDivUp(a, b)`        | `(a + b - 1) / b`                     | Up (conservative for protocol)      |
| `abs(a)`                | Absolute value of int256              | —                                   |
| `neg(a)`                | Negation (BT/FW flows are signed)     | —                                   |
| `subNoNeg(a, b)`        | `a - b`, reverts if negative          | —                                   |
| `sqrt(x)`               | Babylonian method integer square root | —                                   |
| `Int()` / `Uint()`      | Safe int256 ↔ uint256 casting         | —                                   |
| `Int128()` / `Uint96()` | Narrowing casts for storage packing   | —                                   |

## LogExpMath

Ported from Balancer's math library. Implements `ln(x)` and `exp(x)` for signed 256-bit integers at 1e18 scale.

### Usage in the protocol

* **`exp(x)`** — Converts between implied rates and exchange rates: `exchangeRate = exp(lnImpliedRate × timeToExpiry / YEAR)`
* **`ln(x)`** — After computing a post-trade exchange rate, converts back to log-space implied rate for storage and TWAP tracking

Both functions use lookup tables and polynomial approximations. They revert on out-of-bounds inputs (e.g., `ln(0)` or overflow in `exp`). Precision is critical — rounding errors in `exp` compound over many trades and could allow arbitrage.
