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 r341733 = x;
double r341734 = y;
double r341735 = r341734 - r341733;
double r341736 = z;
double r341737 = r341735 * r341736;
double r341738 = t;
double r341739 = r341737 / r341738;
double r341740 = r341733 + r341739;
return r341740;
}
double f(double x, double y, double z, double t) {
double r341741 = x;
double r341742 = -5.5620852206194397e-191;
bool r341743 = r341741 <= r341742;
double r341744 = 9.895725275899005e-166;
bool r341745 = r341741 <= r341744;
double r341746 = !r341745;
bool r341747 = r341743 || r341746;
double r341748 = y;
double r341749 = r341748 - r341741;
double r341750 = z;
double r341751 = t;
double r341752 = r341750 / r341751;
double r341753 = r341749 * r341752;
double r341754 = r341753 + r341741;
double r341755 = 1.0;
double r341756 = r341755 / r341751;
double r341757 = r341749 * r341756;
double r341758 = fma(r341757, r341750, r341741);
double r341759 = r341747 ? r341754 : r341758;
return r341759;
}




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)))