x + y \cdot \frac{z - t}{a - t}\begin{array}{l}
\mathbf{if}\;x \le -5.993850181954760056083277772969421378107 \cdot 10^{-198}:\\
\;\;\;\;x + \left(z - t\right) \cdot \frac{y}{a - t}\\
\mathbf{else}:\\
\;\;\;\;x + y \cdot \frac{z - t}{a - t}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r382665 = x;
double r382666 = y;
double r382667 = z;
double r382668 = t;
double r382669 = r382667 - r382668;
double r382670 = a;
double r382671 = r382670 - r382668;
double r382672 = r382669 / r382671;
double r382673 = r382666 * r382672;
double r382674 = r382665 + r382673;
return r382674;
}
double f(double x, double y, double z, double t, double a) {
double r382675 = x;
double r382676 = -5.99385018195476e-198;
bool r382677 = r382675 <= r382676;
double r382678 = z;
double r382679 = t;
double r382680 = r382678 - r382679;
double r382681 = y;
double r382682 = a;
double r382683 = r382682 - r382679;
double r382684 = r382681 / r382683;
double r382685 = r382680 * r382684;
double r382686 = r382675 + r382685;
double r382687 = r382680 / r382683;
double r382688 = r382681 * r382687;
double r382689 = r382675 + r382688;
double r382690 = r382677 ? r382686 : r382689;
return r382690;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 1.5 |
|---|---|
| Target | 0.4 |
| Herbie | 1.7 |
if x < -5.99385018195476e-198Initial program 1.4
rmApplied pow11.4
Applied pow11.4
Applied pow-prod-down1.4
Simplified2.0
if -5.99385018195476e-198 < x Initial program 1.6
Final simplification1.7
herbie shell --seed 2019322
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisLine from plot-0.2.3.4, B"
:precision binary64
:herbie-target
(if (< y -8.508084860551241e-17) (+ x (* y (/ (- z t) (- a t)))) (if (< y 2.894426862792089e-49) (+ x (* (* y (- z t)) (/ 1 (- a t)))) (+ x (* y (/ (- z t) (- a t))))))
(+ x (* y (/ (- z t) (- a t)))))