x + \left(y - x\right) \cdot \frac{z}{t}\begin{array}{l}
\mathbf{if}\;\frac{z}{t} = -\infty:\\
\;\;\;\;x + \frac{\left(y - x\right) \cdot z}{t}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(y - x, \frac{z}{t}, x\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r578684 = x;
double r578685 = y;
double r578686 = r578685 - r578684;
double r578687 = z;
double r578688 = t;
double r578689 = r578687 / r578688;
double r578690 = r578686 * r578689;
double r578691 = r578684 + r578690;
return r578691;
}
double f(double x, double y, double z, double t) {
double r578692 = z;
double r578693 = t;
double r578694 = r578692 / r578693;
double r578695 = -inf.0;
bool r578696 = r578694 <= r578695;
double r578697 = x;
double r578698 = y;
double r578699 = r578698 - r578697;
double r578700 = r578699 * r578692;
double r578701 = r578700 / r578693;
double r578702 = r578697 + r578701;
double r578703 = fma(r578699, r578694, r578697);
double r578704 = r578696 ? r578702 : r578703;
return r578704;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 1.9 |
|---|---|
| Target | 2.0 |
| Herbie | 1.2 |
if (/ z t) < -inf.0Initial program 64.0
rmApplied associate-*r/0.3
if -inf.0 < (/ z t) Initial program 1.2
Taylor expanded around 0 6.7
Simplified1.2
Final simplification1.2
herbie shell --seed 2020020 +o rules:numerics
(FPCore (x y z t)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:tickPosition from plot-0.2.3.4"
:precision binary64
:herbie-target
(if (< (* (- y x) (/ z t)) -1013646692435.887) (+ x (/ (- y x) (/ t z))) (if (< (* (- y x) (/ z t)) -0.0) (+ x (/ (* (- y x) z) t)) (+ x (/ (- y x) (/ t z)))))
(+ x (* (- y x) (/ z t))))