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 -3.258607955856815675452392884400684456731 \cdot 10^{-306} \lor \neg \left(x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le 0.0\right):\\
\;\;\;\;x + \frac{y - x}{\frac{a - t}{z - t}}\\
\mathbf{else}:\\
\;\;\;\;\left(y + \frac{x \cdot z}{t}\right) - \frac{z \cdot y}{t}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r579536 = x;
double r579537 = y;
double r579538 = r579537 - r579536;
double r579539 = z;
double r579540 = t;
double r579541 = r579539 - r579540;
double r579542 = r579538 * r579541;
double r579543 = a;
double r579544 = r579543 - r579540;
double r579545 = r579542 / r579544;
double r579546 = r579536 + r579545;
return r579546;
}
double f(double x, double y, double z, double t, double a) {
double r579547 = x;
double r579548 = y;
double r579549 = r579548 - r579547;
double r579550 = z;
double r579551 = t;
double r579552 = r579550 - r579551;
double r579553 = r579549 * r579552;
double r579554 = a;
double r579555 = r579554 - r579551;
double r579556 = r579553 / r579555;
double r579557 = r579547 + r579556;
double r579558 = -3.2586079558568157e-306;
bool r579559 = r579557 <= r579558;
double r579560 = 0.0;
bool r579561 = r579557 <= r579560;
double r579562 = !r579561;
bool r579563 = r579559 || r579562;
double r579564 = r579555 / r579552;
double r579565 = r579549 / r579564;
double r579566 = r579547 + r579565;
double r579567 = r579547 * r579550;
double r579568 = r579567 / r579551;
double r579569 = r579548 + r579568;
double r579570 = r579550 * r579548;
double r579571 = r579570 / r579551;
double r579572 = r579569 - r579571;
double r579573 = r579563 ? r579566 : r579572;
return r579573;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.7 |
|---|---|
| Target | 9.1 |
| Herbie | 7.8 |
if (+ x (/ (* (- y x) (- z t)) (- a t))) < -3.2586079558568157e-306 or 0.0 < (+ x (/ (* (- y x) (- z t)) (- a t))) Initial program 21.4
rmApplied associate-/l*6.8
if -3.2586079558568157e-306 < (+ x (/ (* (- y x) (- z t)) (- a t))) < 0.0Initial program 61.0
Taylor expanded around inf 18.5
Final simplification7.8
herbie shell --seed 2019291
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:linMap from Chart-1.5.3"
:precision binary64
:herbie-target
(if (< a -1.6153062845442575e-142) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t)))) (if (< a 3.7744031700831742e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t))))))
(+ x (/ (* (- y x) (- z t)) (- a t))))