x - \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;a \le -1.598281406670949442324391521520754455565 \cdot 10^{-10}:\\
\;\;\;\;\frac{y}{\frac{a}{t - z}} + x\\
\mathbf{elif}\;a \le 1.669828349187371898605130590820026774835 \cdot 10^{-121}:\\
\;\;\;\;x - \frac{y \cdot \left(z - t\right)}{a}\\
\mathbf{elif}\;a \le 1.540672155547814806102531356141137000031 \cdot 10^{96}:\\
\;\;\;\;\mathsf{fma}\left(\frac{t}{a}, y, x\right) - \frac{y \cdot z}{a}\\
\mathbf{else}:\\
\;\;\;\;\frac{y}{\frac{a}{t - z}} + x\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r278152 = x;
double r278153 = y;
double r278154 = z;
double r278155 = t;
double r278156 = r278154 - r278155;
double r278157 = r278153 * r278156;
double r278158 = a;
double r278159 = r278157 / r278158;
double r278160 = r278152 - r278159;
return r278160;
}
double f(double x, double y, double z, double t, double a) {
double r278161 = a;
double r278162 = -1.5982814066709494e-10;
bool r278163 = r278161 <= r278162;
double r278164 = y;
double r278165 = t;
double r278166 = z;
double r278167 = r278165 - r278166;
double r278168 = r278161 / r278167;
double r278169 = r278164 / r278168;
double r278170 = x;
double r278171 = r278169 + r278170;
double r278172 = 1.669828349187372e-121;
bool r278173 = r278161 <= r278172;
double r278174 = r278166 - r278165;
double r278175 = r278164 * r278174;
double r278176 = r278175 / r278161;
double r278177 = r278170 - r278176;
double r278178 = 1.5406721555478148e+96;
bool r278179 = r278161 <= r278178;
double r278180 = r278165 / r278161;
double r278181 = fma(r278180, r278164, r278170);
double r278182 = r278164 * r278166;
double r278183 = r278182 / r278161;
double r278184 = r278181 - r278183;
double r278185 = r278179 ? r278184 : r278171;
double r278186 = r278173 ? r278177 : r278185;
double r278187 = r278163 ? r278171 : r278186;
return r278187;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 6.0 |
|---|---|
| Target | 0.7 |
| Herbie | 1.2 |
if a < -1.5982814066709494e-10 or 1.5406721555478148e+96 < a Initial program 9.8
Simplified1.7
rmApplied fma-udef1.7
Simplified0.5
if -1.5982814066709494e-10 < a < 1.669828349187372e-121Initial program 1.1
if 1.669828349187372e-121 < a < 1.5406721555478148e+96Initial program 2.2
Simplified1.0
rmApplied fma-udef1.0
Simplified3.4
Taylor expanded around 0 2.2
Simplified3.5
Final simplification1.2
herbie shell --seed 2019179 +o rules:numerics
(FPCore (x y z t a)
:name "Optimisation.CirclePacking:place from circle-packing-0.1.0.4, F"
:herbie-target
(if (< y -1.0761266216389975e-10) (- x (/ 1.0 (/ (/ a (- z t)) y))) (if (< y 2.894426862792089e-49) (- x (/ (* y (- z t)) a)) (- x (/ y (/ a (- z t))))))
(- x (/ (* y (- z t)) a)))