x + \frac{\left(y - x\right) \cdot z}{t}\begin{array}{l}
\mathbf{if}\;x + \frac{\left(y - x\right) \cdot z}{t} = -\infty:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{t} - \frac{x}{t}, z, x\right)\\
\mathbf{elif}\;x + \frac{\left(y - x\right) \cdot z}{t} \le -2.715106235456037737959438890335298524578 \cdot 10^{-132}:\\
\;\;\;\;x + \frac{\left(y - x\right) \cdot z}{t}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{z}{t}, y, x - \frac{x}{\frac{t}{z}}\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r20750325 = x;
double r20750326 = y;
double r20750327 = r20750326 - r20750325;
double r20750328 = z;
double r20750329 = r20750327 * r20750328;
double r20750330 = t;
double r20750331 = r20750329 / r20750330;
double r20750332 = r20750325 + r20750331;
return r20750332;
}
double f(double x, double y, double z, double t) {
double r20750333 = x;
double r20750334 = y;
double r20750335 = r20750334 - r20750333;
double r20750336 = z;
double r20750337 = r20750335 * r20750336;
double r20750338 = t;
double r20750339 = r20750337 / r20750338;
double r20750340 = r20750333 + r20750339;
double r20750341 = -inf.0;
bool r20750342 = r20750340 <= r20750341;
double r20750343 = r20750334 / r20750338;
double r20750344 = r20750333 / r20750338;
double r20750345 = r20750343 - r20750344;
double r20750346 = fma(r20750345, r20750336, r20750333);
double r20750347 = -2.7151062354560377e-132;
bool r20750348 = r20750340 <= r20750347;
double r20750349 = r20750336 / r20750338;
double r20750350 = r20750338 / r20750336;
double r20750351 = r20750333 / r20750350;
double r20750352 = r20750333 - r20750351;
double r20750353 = fma(r20750349, r20750334, r20750352);
double r20750354 = r20750348 ? r20750340 : r20750353;
double r20750355 = r20750342 ? r20750346 : r20750354;
return r20750355;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 6.4 |
|---|---|
| Target | 2.1 |
| Herbie | 1.1 |
if (+ x (/ (* (- y x) z) t)) < -inf.0Initial program 64.0
Simplified0.2
rmApplied div-sub0.2
if -inf.0 < (+ x (/ (* (- y x) z) t)) < -2.7151062354560377e-132Initial program 0.2
if -2.7151062354560377e-132 < (+ x (/ (* (- y x) z) t)) Initial program 6.4
Simplified6.0
Taylor expanded around 0 6.4
Simplified1.7
Final simplification1.1
herbie shell --seed 2019200 +o rules:numerics
(FPCore (x y z t)
:name "Numeric.Histogram:binBounds from Chart-1.5.3"
:herbie-target
(if (< x -9.025511195533005e-135) (- x (* (/ z t) (- x y))) (if (< x 4.275032163700715e-250) (+ x (* (/ (- y x) t) z)) (+ x (/ (- y x) (/ t z)))))
(+ x (/ (* (- y x) z) t)))