1 unstable release
0.1.0 | Nov 14, 2023 |
---|
#1 in #arithmetics
92KB
740 lines
roundme
roundme
is an experimental human-assisted rounding analyzer. It aims to provide recommendations to determine if an arithmetic operation should round up or down
Install
Install with
cargo install roundme
To install the latest github version
git clone git@github.com:crytic/roundme.git
cd roundme
cargo install --path .
How to use
- Run
roundme init
to generate a default configuration file. - Run
roundme config
to generate user configuration file. - Run
roundme analyze
to analyze the configuration file - Run
roundme pdf
to generate a PDF (requirelatexmk
)
Running roundme pdf
on the default configuration will generate the following:
Configuration
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.
Features
- Recommend what arithemic operation needs to round up or down
- Generate latex-based report in PDF
Rules
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)
Dependencies
~5–8MB
~144K SLoC