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 -5.94158773471745396 \cdot 10^{-307} \lor \neg \left(x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le 0.0\right):\\
\;\;\;\;\left(y - x\right) \cdot \frac{z - t}{a - t} + x\\
\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 r743340 = x;
double r743341 = y;
double r743342 = r743341 - r743340;
double r743343 = z;
double r743344 = t;
double r743345 = r743343 - r743344;
double r743346 = r743342 * r743345;
double r743347 = a;
double r743348 = r743347 - r743344;
double r743349 = r743346 / r743348;
double r743350 = r743340 + r743349;
return r743350;
}
double f(double x, double y, double z, double t, double a) {
double r743351 = x;
double r743352 = y;
double r743353 = r743352 - r743351;
double r743354 = z;
double r743355 = t;
double r743356 = r743354 - r743355;
double r743357 = r743353 * r743356;
double r743358 = a;
double r743359 = r743358 - r743355;
double r743360 = r743357 / r743359;
double r743361 = r743351 + r743360;
double r743362 = -5.941587734717454e-307;
bool r743363 = r743361 <= r743362;
double r743364 = 0.0;
bool r743365 = r743361 <= r743364;
double r743366 = !r743365;
bool r743367 = r743363 || r743366;
double r743368 = r743356 / r743359;
double r743369 = r743353 * r743368;
double r743370 = r743369 + r743351;
double r743371 = r743351 * r743354;
double r743372 = r743371 / r743355;
double r743373 = r743352 + r743372;
double r743374 = r743354 * r743352;
double r743375 = r743374 / r743355;
double r743376 = r743373 - r743375;
double r743377 = r743367 ? r743370 : r743376;
return r743377;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.6 |
|---|---|
| Target | 9.1 |
| Herbie | 7.9 |
if (+ x (/ (* (- y x) (- z t)) (- a t))) < -5.941587734717454e-307 or 0.0 < (+ x (/ (* (- y x) (- z t)) (- a t))) Initial program 21.4
Simplified10.5
rmApplied fma-udef10.6
rmApplied div-inv10.6
Applied associate-*l*7.1
Simplified7.0
if -5.941587734717454e-307 < (+ x (/ (* (- y x) (- z t)) (- a t))) < 0.0Initial program 61.3
Simplified61.1
rmApplied fma-udef61.4
rmApplied div-inv61.3
Applied associate-*l*61.1
Simplified61.1
Taylor expanded around inf 18.2
Final simplification7.9
herbie shell --seed 2020047 +o rules:numerics
(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.774403170083174e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t))))))
(+ x (/ (* (- y x) (- z t)) (- a t))))