x + \frac{y \cdot \left(z - x\right)}{t}\begin{array}{l}
\mathbf{if}\;t \le -5631930325664136519745536:\\
\;\;\;\;x + \frac{y}{\frac{t}{z - x}}\\
\mathbf{elif}\;t \le 1.313456436383683786127876557812595999187 \cdot 10^{-110}:\\
\;\;\;\;\left(\frac{y \cdot z}{t} - \frac{x \cdot y}{t}\right) + x\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y}{\frac{t}{z - x}}\\
\end{array}double f(double x, double y, double z, double t) {
double r11890913 = x;
double r11890914 = y;
double r11890915 = z;
double r11890916 = r11890915 - r11890913;
double r11890917 = r11890914 * r11890916;
double r11890918 = t;
double r11890919 = r11890917 / r11890918;
double r11890920 = r11890913 + r11890919;
return r11890920;
}
double f(double x, double y, double z, double t) {
double r11890921 = t;
double r11890922 = -5.631930325664137e+24;
bool r11890923 = r11890921 <= r11890922;
double r11890924 = x;
double r11890925 = y;
double r11890926 = z;
double r11890927 = r11890926 - r11890924;
double r11890928 = r11890921 / r11890927;
double r11890929 = r11890925 / r11890928;
double r11890930 = r11890924 + r11890929;
double r11890931 = 1.3134564363836838e-110;
bool r11890932 = r11890921 <= r11890931;
double r11890933 = r11890925 * r11890926;
double r11890934 = r11890933 / r11890921;
double r11890935 = r11890924 * r11890925;
double r11890936 = r11890935 / r11890921;
double r11890937 = r11890934 - r11890936;
double r11890938 = r11890937 + r11890924;
double r11890939 = r11890932 ? r11890938 : r11890930;
double r11890940 = r11890923 ? r11890930 : r11890939;
return r11890940;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.6 |
|---|---|
| Target | 2.0 |
| Herbie | 1.7 |
if t < -5.631930325664137e+24 or 1.3134564363836838e-110 < t Initial program 8.9
rmApplied associate-/l*1.6
if -5.631930325664137e+24 < t < 1.3134564363836838e-110Initial program 1.9
Taylor expanded around 0 1.9
Final simplification1.7
herbie shell --seed 2019171 +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)))