x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le -1.610319660026901692627567289598819324756 \cdot 10^{-296}:\\
\;\;\;\;\sqrt[3]{y} \cdot \left(\frac{z - t}{a - t} \cdot \left(\sqrt[3]{y} \cdot \sqrt[3]{y}\right)\right) + \mathsf{fma}\left(\frac{z - t}{a - t}, -x, x\right)\\
\mathbf{elif}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le 0.0:\\
\;\;\;\;y \cdot \frac{z - t}{a - t} + \frac{z \cdot x}{t}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{y} \cdot \left(\frac{z - t}{a - t} \cdot \left(\sqrt[3]{y} \cdot \sqrt[3]{y}\right)\right) + \mathsf{fma}\left(\frac{z - t}{a - t}, -x, x\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r26282425 = x;
double r26282426 = y;
double r26282427 = r26282426 - r26282425;
double r26282428 = z;
double r26282429 = t;
double r26282430 = r26282428 - r26282429;
double r26282431 = r26282427 * r26282430;
double r26282432 = a;
double r26282433 = r26282432 - r26282429;
double r26282434 = r26282431 / r26282433;
double r26282435 = r26282425 + r26282434;
return r26282435;
}
double f(double x, double y, double z, double t, double a) {
double r26282436 = x;
double r26282437 = y;
double r26282438 = r26282437 - r26282436;
double r26282439 = z;
double r26282440 = t;
double r26282441 = r26282439 - r26282440;
double r26282442 = r26282438 * r26282441;
double r26282443 = a;
double r26282444 = r26282443 - r26282440;
double r26282445 = r26282442 / r26282444;
double r26282446 = r26282436 + r26282445;
double r26282447 = -1.6103196600269017e-296;
bool r26282448 = r26282446 <= r26282447;
double r26282449 = cbrt(r26282437);
double r26282450 = r26282441 / r26282444;
double r26282451 = r26282449 * r26282449;
double r26282452 = r26282450 * r26282451;
double r26282453 = r26282449 * r26282452;
double r26282454 = -r26282436;
double r26282455 = fma(r26282450, r26282454, r26282436);
double r26282456 = r26282453 + r26282455;
double r26282457 = 0.0;
bool r26282458 = r26282446 <= r26282457;
double r26282459 = r26282437 * r26282450;
double r26282460 = r26282439 * r26282436;
double r26282461 = r26282460 / r26282440;
double r26282462 = r26282459 + r26282461;
double r26282463 = r26282458 ? r26282462 : r26282456;
double r26282464 = r26282448 ? r26282456 : r26282463;
return r26282464;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 24.0 |
|---|---|
| Target | 8.5 |
| Herbie | 6.1 |
if (+ x (/ (* (- y x) (- z t)) (- a t))) < -1.6103196600269017e-296 or 0.0 < (+ x (/ (* (- y x) (- z t)) (- a t))) Initial program 20.8
Simplified6.7
rmApplied fma-udef6.7
rmApplied sub-neg6.7
Applied distribute-lft-in6.7
Applied associate-+l+4.6
Simplified4.6
rmApplied add-cube-cbrt5.2
Applied associate-*r*5.2
if -1.6103196600269017e-296 < (+ x (/ (* (- y x) (- z t)) (- a t))) < 0.0Initial program 60.9
Simplified60.9
rmApplied fma-udef60.9
rmApplied sub-neg60.9
Applied distribute-lft-in60.9
Applied associate-+l+35.1
Simplified35.1
Taylor expanded around inf 17.0
Final simplification6.1
herbie shell --seed 2019169 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:linMap from Chart-1.5.3"
:herbie-target
(if (< a -1.6153062845442575e-142) (+ x (* (/ (- y x) 1.0) (/ (- z t) (- a t)))) (if (< a 3.774403170083174e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1.0) (/ (- z t) (- a t))))))
(+ x (/ (* (- y x) (- z t)) (- a t))))