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.490239212793318560011781773848949760307 \cdot 10^{-243}:\\
\;\;\;\;\frac{z - t}{a - t} \cdot \left(y - x\right) + x\\
\mathbf{elif}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le 0.0:\\
\;\;\;\;\left(y + \frac{x \cdot z}{t}\right) - \frac{z \cdot y}{t}\\
\mathbf{else}:\\
\;\;\;\;\frac{z - t}{a - t} \cdot \left(y - x\right) + x\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r116531370 = x;
double r116531371 = y;
double r116531372 = r116531371 - r116531370;
double r116531373 = z;
double r116531374 = t;
double r116531375 = r116531373 - r116531374;
double r116531376 = r116531372 * r116531375;
double r116531377 = a;
double r116531378 = r116531377 - r116531374;
double r116531379 = r116531376 / r116531378;
double r116531380 = r116531370 + r116531379;
return r116531380;
}
double f(double x, double y, double z, double t, double a) {
double r116531381 = x;
double r116531382 = y;
double r116531383 = r116531382 - r116531381;
double r116531384 = z;
double r116531385 = t;
double r116531386 = r116531384 - r116531385;
double r116531387 = r116531383 * r116531386;
double r116531388 = a;
double r116531389 = r116531388 - r116531385;
double r116531390 = r116531387 / r116531389;
double r116531391 = r116531381 + r116531390;
double r116531392 = -1.4902392127933186e-243;
bool r116531393 = r116531391 <= r116531392;
double r116531394 = r116531386 / r116531389;
double r116531395 = r116531394 * r116531383;
double r116531396 = r116531395 + r116531381;
double r116531397 = 0.0;
bool r116531398 = r116531391 <= r116531397;
double r116531399 = r116531381 * r116531384;
double r116531400 = r116531399 / r116531385;
double r116531401 = r116531382 + r116531400;
double r116531402 = r116531384 * r116531382;
double r116531403 = r116531402 / r116531385;
double r116531404 = r116531401 - r116531403;
double r116531405 = r116531398 ? r116531404 : r116531396;
double r116531406 = r116531393 ? r116531396 : r116531405;
return r116531406;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.5 |
|---|---|
| Target | 9.3 |
| Herbie | 8.6 |
if (+ x (/ (* (- y x) (- z t)) (- a t))) < -1.4902392127933186e-243 or 0.0 < (+ x (/ (* (- y x) (- z t)) (- a t))) Initial program 21.4
Simplified10.1
rmApplied div-sub10.1
rmApplied div-inv10.1
rmApplied fma-udef10.1
Simplified10.1
rmApplied div-inv10.1
Applied div-inv10.2
Applied distribute-rgt-out--10.2
Applied associate-*r*7.4
Simplified7.3
if -1.4902392127933186e-243 < (+ x (/ (* (- y x) (- z t)) (- a t))) < 0.0Initial program 55.5
Simplified55.9
rmApplied div-sub55.9
rmApplied div-inv56.0
rmApplied fma-udef56.1
Simplified56.2
Taylor expanded around inf 21.2
Final simplification8.6
herbie shell --seed 2019173 +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))))