brine-fp

Crates.iobrine-fp
lib.rsbrine-fp
version0.2.1
created_at2025-04-10 19:42:27.487734+00
updated_at2025-07-28 16:24:49.181169+00
description192-bit fixed-point math library with logarithmic and exponential functions. Designed for blockchain, scientific, and financial applications.
homepage
repositoryhttps://github.com/zfedoran/brine-fp
max_upload_size
id1628776
size85,581
(zfedoran)

documentation

README

brine-fp

license crates.io

brine-fp is a 192-bit fixed-point math library built for high-precision, deterministic computation in constrained environments like the Solana SVM. It provides arithmetic, exponentiation, logarithms, and powers using u192-based representations, and is optimized for low compute unit (CU) usage on-chain.


⚡ Performance

Operation CU (Approx.)
log(2) ~18,500
exp(0.5) ~15,000
pow(2, ½) ~100
frexp(2) ~150

These values are measured inside the Solana SVM (via test programs).


Features

  • 192-bit unsigned & signed fixed-point types with 18 decimal places.
  • Supports log, exp, pow, floor, ceil, almost_eq, etc.
  • Remez polynomial approximations based on FreeBSD msun.
  • Designed for deterministic and overflow-aware computation.
  • Suitable for smart contract environments and financial logic.

Quick Start

use brine_fp::UnsignedNumeric;

// Construct a fixed-point number: 5.0
let five = UnsignedNumeric::new(5);

// Compute its exponential
let result = five.signed().exp().unwrap();

println!("e^5 ≈ {}", result.to_string());

Internal Representation

Each UnsignedNumeric wraps a InnerUint([lo, mid, hi]), representing a 192-bit unsigned integer:

InnerUint([lo, mid, hi])

// Equivalent to:
// value = lo + (mid << 64) + (hi << 128)

All values are scaled by 10^18, enabling 18-digit decimal precision.

This format ensures:

  • Extreme range: from 1e-18 up to ~6.3 × 10³⁹ real-world units
  • High precision: 18 decimals
  • Fully deterministic integer math (no f64, no float)

Use Cases

  • On-chain bonding curves
  • DeFi math & simulations
  • Deterministic pricing formulas
  • Token economics
  • Time-value calculations
  • Anywhere you want exp() or log() without f64

Upstream Acknowledgements

brine-fp is heavily based on prior work and stands on the shoulders of giants. The core math and algorithms are derived from:


Contributing

Contributions are welcome! Please open issues or PRs on the GitHub repo.

Commit count: 3

cargo fmt