x + \frac{\left(y - x\right) \cdot z}{t}\begin{array}{l}
\mathbf{if}\;x \le -5.562085220619439676639571842548833537494 \cdot 10^{-191} \lor \neg \left(x \le 9.895725275899004823919176625829480462873 \cdot 10^{-166}\right):\\
\;\;\;\;\left(y - x\right) \cdot \frac{z}{t} + x\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\left(y - x\right) \cdot \frac{1}{t}, z, x\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r289184 = x;
double r289185 = y;
double r289186 = r289185 - r289184;
double r289187 = z;
double r289188 = r289186 * r289187;
double r289189 = t;
double r289190 = r289188 / r289189;
double r289191 = r289184 + r289190;
return r289191;
}
double f(double x, double y, double z, double t) {
double r289192 = x;
double r289193 = -5.5620852206194397e-191;
bool r289194 = r289192 <= r289193;
double r289195 = 9.895725275899005e-166;
bool r289196 = r289192 <= r289195;
double r289197 = !r289196;
bool r289198 = r289194 || r289197;
double r289199 = y;
double r289200 = r289199 - r289192;
double r289201 = z;
double r289202 = t;
double r289203 = r289201 / r289202;
double r289204 = r289200 * r289203;
double r289205 = r289204 + r289192;
double r289206 = 1.0;
double r289207 = r289206 / r289202;
double r289208 = r289200 * r289207;
double r289209 = fma(r289208, r289201, r289192);
double r289210 = r289198 ? r289205 : r289209;
return r289210;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 6.6 |
|---|---|
| Target | 2.1 |
| Herbie | 2.2 |
if x < -5.5620852206194397e-191 or 9.895725275899005e-166 < x Initial program 6.9
Simplified6.9
rmApplied div-inv6.9
rmApplied fma-udef6.9
Simplified1.2
if -5.5620852206194397e-191 < x < 9.895725275899005e-166Initial program 5.6
Simplified5.3
rmApplied div-inv5.4
Final simplification2.2
herbie shell --seed 2019325 +o rules:numerics
(FPCore (x y z t)
:name "Numeric.Histogram:binBounds from Chart-1.5.3"
:precision binary64
: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)))