x + \frac{y \cdot \left(z - x\right)}{t}\begin{array}{l}
\mathbf{if}\;t \le -8.363664958439672667278554160764100153889 \cdot 10^{69}:\\
\;\;\;\;\mathsf{fma}\left(z - x, \frac{y}{t}, x\right)\\
\mathbf{elif}\;t \le 7.486542709900388243398285213925344255536 \cdot 10^{-169}:\\
\;\;\;\;\frac{\left(z - x\right) \cdot y}{t} + x\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(z - x, \frac{y}{t}, x\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r12651754 = x;
double r12651755 = y;
double r12651756 = z;
double r12651757 = r12651756 - r12651754;
double r12651758 = r12651755 * r12651757;
double r12651759 = t;
double r12651760 = r12651758 / r12651759;
double r12651761 = r12651754 + r12651760;
return r12651761;
}
double f(double x, double y, double z, double t) {
double r12651762 = t;
double r12651763 = -8.363664958439673e+69;
bool r12651764 = r12651762 <= r12651763;
double r12651765 = z;
double r12651766 = x;
double r12651767 = r12651765 - r12651766;
double r12651768 = y;
double r12651769 = r12651768 / r12651762;
double r12651770 = fma(r12651767, r12651769, r12651766);
double r12651771 = 7.486542709900388e-169;
bool r12651772 = r12651762 <= r12651771;
double r12651773 = r12651767 * r12651768;
double r12651774 = r12651773 / r12651762;
double r12651775 = r12651774 + r12651766;
double r12651776 = r12651772 ? r12651775 : r12651770;
double r12651777 = r12651764 ? r12651770 : r12651776;
return r12651777;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 6.3 |
|---|---|
| Target | 2.0 |
| Herbie | 1.7 |
if t < -8.363664958439673e+69 or 7.486542709900388e-169 < t Initial program 8.1
Simplified1.3
if -8.363664958439673e+69 < t < 7.486542709900388e-169Initial program 2.7
Final simplification1.7
herbie shell --seed 2019179 +o rules:numerics
(FPCore (x y z t)
:name "Optimisation.CirclePacking:place from circle-packing-0.1.0.4, D"
:herbie-target
(- x (+ (* x (/ y t)) (* (- z) (/ y t))))
(+ x (/ (* y (- z x)) t)))