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.175543709426314317899237427278029417013 \cdot 10^{-293} \lor \neg \left(x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le 0.0\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{z - t}{a - t}, y - x, x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{z}{t}, x, \mathsf{fma}\left(\frac{z}{t}, -y, y\right)\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r414005 = x;
double r414006 = y;
double r414007 = r414006 - r414005;
double r414008 = z;
double r414009 = t;
double r414010 = r414008 - r414009;
double r414011 = r414007 * r414010;
double r414012 = a;
double r414013 = r414012 - r414009;
double r414014 = r414011 / r414013;
double r414015 = r414005 + r414014;
return r414015;
}
double f(double x, double y, double z, double t, double a) {
double r414016 = x;
double r414017 = y;
double r414018 = r414017 - r414016;
double r414019 = z;
double r414020 = t;
double r414021 = r414019 - r414020;
double r414022 = r414018 * r414021;
double r414023 = a;
double r414024 = r414023 - r414020;
double r414025 = r414022 / r414024;
double r414026 = r414016 + r414025;
double r414027 = -5.175543709426314e-293;
bool r414028 = r414026 <= r414027;
double r414029 = 0.0;
bool r414030 = r414026 <= r414029;
double r414031 = !r414030;
bool r414032 = r414028 || r414031;
double r414033 = r414021 / r414024;
double r414034 = fma(r414033, r414018, r414016);
double r414035 = r414019 / r414020;
double r414036 = -r414017;
double r414037 = fma(r414035, r414036, r414017);
double r414038 = fma(r414035, r414016, r414037);
double r414039 = r414032 ? r414034 : r414038;
return r414039;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 24.2 |
|---|---|
| Target | 8.9 |
| Herbie | 8.0 |
if (+ x (/ (* (- y x) (- z t)) (- a t))) < -5.175543709426314e-293 or 0.0 < (+ x (/ (* (- y x) (- z t)) (- a t))) Initial program 21.0
Simplified7.1
if -5.175543709426314e-293 < (+ x (/ (* (- y x) (- z t)) (- a t))) < 0.0Initial program 59.8
Simplified59.8
rmApplied div-inv59.8
rmApplied add-cube-cbrt59.8
Simplified59.8
Simplified59.8
Taylor expanded around inf 19.0
Simplified19.0
Final simplification8.0
herbie shell --seed 2019179 +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))))