x + \frac{y \cdot \left(z - x\right)}{t}\begin{array}{l}
\mathbf{if}\;x \le -2.642592177827107676405494020606785260044 \cdot 10^{-268}:\\
\;\;\;\;x - \left(x - z\right) \cdot \frac{y}{t}\\
\mathbf{elif}\;x \le 4.817264783557647095538793580222919409807 \cdot 10^{-197}:\\
\;\;\;\;x - \frac{y}{\frac{t}{x - z}}\\
\mathbf{else}:\\
\;\;\;\;x - \frac{x - z}{\frac{t}{y}}\\
\end{array}double f(double x, double y, double z, double t) {
double r271432 = x;
double r271433 = y;
double r271434 = z;
double r271435 = r271434 - r271432;
double r271436 = r271433 * r271435;
double r271437 = t;
double r271438 = r271436 / r271437;
double r271439 = r271432 + r271438;
return r271439;
}
double f(double x, double y, double z, double t) {
double r271440 = x;
double r271441 = -2.6425921778271077e-268;
bool r271442 = r271440 <= r271441;
double r271443 = z;
double r271444 = r271440 - r271443;
double r271445 = y;
double r271446 = t;
double r271447 = r271445 / r271446;
double r271448 = r271444 * r271447;
double r271449 = r271440 - r271448;
double r271450 = 4.817264783557647e-197;
bool r271451 = r271440 <= r271450;
double r271452 = r271446 / r271444;
double r271453 = r271445 / r271452;
double r271454 = r271440 - r271453;
double r271455 = r271446 / r271445;
double r271456 = r271444 / r271455;
double r271457 = r271440 - r271456;
double r271458 = r271451 ? r271454 : r271457;
double r271459 = r271442 ? r271449 : r271458;
return r271459;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.5 |
|---|---|
| Target | 2.1 |
| Herbie | 1.9 |
if x < -2.6425921778271077e-268Initial program 6.8
Simplified6.8
Taylor expanded around 0 6.8
Simplified1.7
rmApplied div-inv1.9
Simplified1.8
if -2.6425921778271077e-268 < x < 4.817264783557647e-197Initial program 5.2
Simplified5.2
rmApplied associate-/l*5.0
if 4.817264783557647e-197 < x Initial program 6.7
Simplified6.7
Taylor expanded around 0 6.7
Simplified1.1
Final simplification1.9
herbie shell --seed 2019194
(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)))