roundme is a human-assisted rounding analyzer. It helps its operator determine whether an arithmetic operation should round up or down.
rounding() is the expected rounding direction for the result (up or down)
A + B => rounding(A), rounding(B) (addition does not change the rounding direction)A - B => rounding(A), ! rounding(B) (the rounding direction of the substracted element is inverse of the expected rounding)A * B => rounding(A), rounding(B), rounding(*) (multiplication does not change the rounding direction)A / B => rounding(A), ! rounding(B), rounding(/) (the rounding direction of the denominator is the inverse of the expected rounding)A ** B
If A>=1 => rounding(A), rounding(B)If A<1 => rounding(A), ! rounding(B) (if A is below 1, the rounding direction of the exponent is the inverse of the expected rounding)roundme init-sample to generate a default configuration file.roundme init to generate user configuration file.roundme analyze to analyze the configuration fileroundme analyze --output-format pdf to generate a PDF (require latexmk)Running roundme analyze --output-format pdf on the default configuration will generate the following:

roundme relies on a configuration file:
formula: a * b / c
round_up: true
less_than_one: ["a * b"] # optional
greater_than_one: ["c"] # optional
formula contains the formula to be analyzeround_up determines if the result of the formula should round up or downless_than_one is used for the ** rules (raw string comparison and sensible to space)greater_than_one is used for the ** rules (raw string comparison and sensible to space)See the balancer V2 example.
Install with
cargo install roundme
To install the latest GitHub version
git clone git@github.com:crytic/roundme.git
cd roundme
cargo install --path .
Rust
100.0%
roundme is a human-assisted rounding analyzer. It helps its operator determine whether an arithmetic operation should round up or down.
rounding() is the expected rounding direction for the result (up or down)
A + B => rounding(A), rounding(B) (addition does not change the rounding direction)A - B => rounding(A), ! rounding(B) (the rounding direction of the substracted element is inverse of the expected rounding)A * B => rounding(A), rounding(B), rounding(*) (multiplication does not change the rounding direction)A / B => rounding(A), ! rounding(B), rounding(/) (the rounding direction of the denominator is the inverse of the expected rounding)A ** B
If A>=1 => rounding(A), rounding(B)If A<1 => rounding(A), ! rounding(B) (if A is below 1, the rounding direction of the exponent is the inverse of the expected rounding)roundme init-sample to generate a default configuration file.roundme init to generate user configuration file.roundme analyze to analyze the configuration fileroundme analyze --output-format pdf to generate a PDF (require latexmk)Running roundme analyze --output-format pdf on the default configuration will generate the following:

roundme relies on a configuration file:
formula: a * b / c
round_up: true
less_than_one: ["a * b"] # optional
greater_than_one: ["c"] # optional
formula contains the formula to be analyzeround_up determines if the result of the formula should round up or downless_than_one is used for the ** rules (raw string comparison and sensible to space)greater_than_one is used for the ** rules (raw string comparison and sensible to space)See the balancer V2 example.
Install with
cargo install roundme
To install the latest GitHub version
git clone git@github.com:crytic/roundme.git
cd roundme
cargo install --path .
Rust
100.0%