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.