Herbie plugins define new functions, add rewrite rules, and even implement number representations.

Herbie plugins are installed separately. Herbie then automatically loads and uses them.

The `softposit-herbie` plugin implements support
for posit arithmetic. Install it
with:

raco pkg install --auto softposit-herbie

This plugin uses the SoftPosit library, only supported on Linux.
Even then is reported to misbehave on some machines. The plugin
support arithmetic operations, `sqrt`

, and quires.

Once `softposit-herbie` is installed,
specify `:precision posit16`

to inform Herbie that it
should assume the core's inputs and outputs are posit numbers. Other
posit sizes (with 8 or 32 bits) and also quires (for 8, 16, and 32
bit posits) are available, but are poorly supported.

The `complex-herbie` plugin implements support for
complex numbers. Install it with:

raco pkg install --auto complex-herbie

Herbie input parameters are always real numbers; complex
numbers must be constructed with `complex`

. The
functions `re`

, `im`

, and `conj`

are available on complex numbers, along with the arithmetic
operators, `exp`

, `log`

, `pow`

,
and `sqrt`

. Complex and real operations use the same
syntax, but cannot be mixed: `(+ (complex 1 2) 1)`

is not
valid. Herbie reports type errors in such situations.

Complex operations are implemented by Racket, so results may differ (slightly) from complex numbers in some other language, especially for non-finite complex numbers. In the future, we hope to support complex-number arguments and fully support all complex-number operations.

The plugin functionality is currently highly experimental; if you would like to develop your own plugins, please write to the mailing list.