x + \frac{y \cdot \left(z - x\right)}{t}\begin{array}{l}
\mathbf{if}\;x \le -2.8802141711072454 \cdot 10^{-269}:\\
\;\;\;\;x + \left(\frac{z}{\frac{t}{y}} - \frac{x}{\frac{t}{y}}\right)\\
\mathbf{elif}\;x \le 3.5955709352295983 \cdot 10^{-115}:\\
\;\;\;\;\frac{y \cdot \left(z - x\right)}{t} + x\\
\mathbf{else}:\\
\;\;\;\;x + \left(\frac{z}{\frac{t}{y}} - \frac{x}{\frac{t}{y}}\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r20050400 = x;
double r20050401 = y;
double r20050402 = z;
double r20050403 = r20050402 - r20050400;
double r20050404 = r20050401 * r20050403;
double r20050405 = t;
double r20050406 = r20050404 / r20050405;
double r20050407 = r20050400 + r20050406;
return r20050407;
}
double f(double x, double y, double z, double t) {
double r20050408 = x;
double r20050409 = -2.8802141711072454e-269;
bool r20050410 = r20050408 <= r20050409;
double r20050411 = z;
double r20050412 = t;
double r20050413 = y;
double r20050414 = r20050412 / r20050413;
double r20050415 = r20050411 / r20050414;
double r20050416 = r20050408 / r20050414;
double r20050417 = r20050415 - r20050416;
double r20050418 = r20050408 + r20050417;
double r20050419 = 3.5955709352295983e-115;
bool r20050420 = r20050408 <= r20050419;
double r20050421 = r20050411 - r20050408;
double r20050422 = r20050413 * r20050421;
double r20050423 = r20050422 / r20050412;
double r20050424 = r20050423 + r20050408;
double r20050425 = r20050420 ? r20050424 : r20050418;
double r20050426 = r20050410 ? r20050418 : r20050425;
return r20050426;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 5.6 |
|---|---|
| Target | 2.1 |
| Herbie | 1.9 |
if x < -2.8802141711072454e-269 or 3.5955709352295983e-115 < x Initial program 5.9
Taylor expanded around 0 5.9
Simplified1.1
rmApplied div-sub1.2
if -2.8802141711072454e-269 < x < 3.5955709352295983e-115Initial program 4.7
rmApplied +-commutative4.7
Final simplification1.9
herbie shell --seed 2019164
(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)))