The Herbie developers are excited to announce
Herbie 1.2! This release focuses on accuracy and
reliability, including better conditionals, more accurate
defaults, and significant bug fixes to the core algorithms.
Herbie automatically improves the accuracy of floating point
expressions. This avoids the bugs, errors, and surprises that so
often occur when working with floating point. Since
our PLDI'15 paper, we've been hard at
work making Herbie more versatile and easier to use.
Breaking Changes and Deprecations
This release fixes a significant and important bug in
Herbie's measurement of program accuracy. Herbie's prior results
had a small chance of recommending an inaccurate program as
accurate.
In line
with FPCore
1.0, we have deprecated the sqr
and cube functions.
Herbie no longer
supports Racket versions
prior to 6.7. Future Herbie releases may continue to step up
supported Racket versions to make better use of recent language
features.
Improvement to core algorithm
Herbie now uses a more rigorous algorithm to evaluate its results,
both increasing reproducibility of its results and better measuring
its output.
Herbie has become much more inventive in what expressions it
can branch on. This leads to more accurate results in many
cases. The reduce:branch-expressionsoption controls this feature.
Herbie now uses a binary search algorithm to choose more
accurate values for conditionals in if statements.
This should make different runs of Herbie produce more similar
results. The reduce:binary-searchoption controls this feature.
Herbie has a higher default value for
the --num-itersparameter.
Users should expect Herbie to be slower but to produce more
accurate results.
A significant bug in the series expansion algorithm has been
fixed, improving Herbie's performance in the presence of
logarithms.
A small tweak to the simplification algorithm results in
simpler and more accurate output from Herbie.
Beta-quality features
Herbie now supports basic operations
on complex numbers, using
the complex, re, and im
functions. We look forward to releasing high-quality complex
number support in the future.
Herbie now supports Windows. Note that the Bessel functions
are not available in the Windows math.h library and
use a fallback. The precision:fallbackoption controls this feature.
Usability improvements
A new Try It feature in
reports lets you run the input program and Herbie's suggested
version on argument values of your choice.
Herbie can now efficiently sample from preconditions such
as (or (< 1 x 2) (< 1001 x 1002)). Previously
such preconditions would produce the dreaded
“could not sample”
error message.
Herbie's web output now includes additional descriptive text,
such as color keys, and additional intuitive interactions, such
as clicking on report page arrows.
Herbie's FPCore output now includes
its error estimates, making
this information easier for other tools to access.
let statements and variary arithmetic operators
are now supported in preconditions.
Herbie will now type-check inputs and report errors for
mismatches, helping further cut down on confusing error
messages.
User errors and Herbie crashes now look different in
reports.
Code Cleanup
Many bugs fixed, including missing rules, infinite loops, and
a few crashes in exceptional circumstances.
Herbie’s HTML output now uses the Racket XML library,
eliminating the possibility of generating invalid HTML.
Herbie uses a new mechanism for defining supported functions,
which should make it easier to add functions in the future.
Try it out!
We're excited to continue to improve Herbie and make it more
useful to scientists, engineers, and programmers around the world.
We've got a lot of features we're excited to work on in the coming
months. Please
report bugs,
join
the
mailing list,
or contribute.