x + \left(y - x\right) \cdot \frac{z}{t}\begin{array}{l}
\mathbf{if}\;z \le -9.321316198184014864250290572846970188364 \cdot 10^{-37}:\\
\;\;\;\;\frac{y - x}{t} \cdot z + x\\
\mathbf{elif}\;z \le 2.048461183832285343472596302907101930479 \cdot 10^{-167}:\\
\;\;\;\;x + \frac{\left(y - x\right) \cdot z}{t}\\
\mathbf{else}:\\
\;\;\;\;\frac{y - x}{t} \cdot z + x\\
\end{array}double f(double x, double y, double z, double t) {
double r23462386 = x;
double r23462387 = y;
double r23462388 = r23462387 - r23462386;
double r23462389 = z;
double r23462390 = t;
double r23462391 = r23462389 / r23462390;
double r23462392 = r23462388 * r23462391;
double r23462393 = r23462386 + r23462392;
return r23462393;
}
double f(double x, double y, double z, double t) {
double r23462394 = z;
double r23462395 = -9.321316198184015e-37;
bool r23462396 = r23462394 <= r23462395;
double r23462397 = y;
double r23462398 = x;
double r23462399 = r23462397 - r23462398;
double r23462400 = t;
double r23462401 = r23462399 / r23462400;
double r23462402 = r23462401 * r23462394;
double r23462403 = r23462402 + r23462398;
double r23462404 = 2.0484611838322853e-167;
bool r23462405 = r23462394 <= r23462404;
double r23462406 = r23462399 * r23462394;
double r23462407 = r23462406 / r23462400;
double r23462408 = r23462398 + r23462407;
double r23462409 = r23462405 ? r23462408 : r23462403;
double r23462410 = r23462396 ? r23462403 : r23462409;
return r23462410;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 2.0 |
|---|---|
| Target | 2.2 |
| Herbie | 2.1 |
if z < -9.321316198184015e-37 or 2.0484611838322853e-167 < z Initial program 2.5
Simplified2.5
rmApplied fma-udef2.5
rmApplied div-inv2.5
Applied associate-*l*2.8
Simplified2.7
if -9.321316198184015e-37 < z < 2.0484611838322853e-167Initial program 1.4
Simplified1.4
rmApplied fma-udef1.4
rmApplied associate-*l/1.2
Final simplification2.1
herbie shell --seed 2019174 +o rules:numerics
(FPCore (x y z t)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:tickPosition from plot-0.2.3.4"
:herbie-target
(if (< (* (- y x) (/ z t)) -1013646692435.8867) (+ 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))))