x + \frac{\left(y - x\right) \cdot z}{t}\begin{array}{l}
\mathbf{if}\;z \le -1.017002593556539813041054414324238528015 \cdot 10^{-36}:\\
\;\;\;\;x + \frac{\frac{y - x}{t}}{\frac{1}{z}}\\
\mathbf{elif}\;z \le 1.565053397910881773034896102378336415142 \cdot 10^{83}:\\
\;\;\;\;x + \frac{\left(y - x\right) \cdot z}{t}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{\frac{y - x}{t}}{\frac{1}{z}}\\
\end{array}double f(double x, double y, double z, double t) {
double r33279165 = x;
double r33279166 = y;
double r33279167 = r33279166 - r33279165;
double r33279168 = z;
double r33279169 = r33279167 * r33279168;
double r33279170 = t;
double r33279171 = r33279169 / r33279170;
double r33279172 = r33279165 + r33279171;
return r33279172;
}
double f(double x, double y, double z, double t) {
double r33279173 = z;
double r33279174 = -1.0170025935565398e-36;
bool r33279175 = r33279173 <= r33279174;
double r33279176 = x;
double r33279177 = y;
double r33279178 = r33279177 - r33279176;
double r33279179 = t;
double r33279180 = r33279178 / r33279179;
double r33279181 = 1.0;
double r33279182 = r33279181 / r33279173;
double r33279183 = r33279180 / r33279182;
double r33279184 = r33279176 + r33279183;
double r33279185 = 1.5650533979108818e+83;
bool r33279186 = r33279173 <= r33279185;
double r33279187 = r33279178 * r33279173;
double r33279188 = r33279187 / r33279179;
double r33279189 = r33279176 + r33279188;
double r33279190 = r33279186 ? r33279189 : r33279184;
double r33279191 = r33279175 ? r33279184 : r33279190;
return r33279191;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.7 |
|---|---|
| Target | 2.1 |
| Herbie | 1.7 |
if z < -1.0170025935565398e-36 or 1.5650533979108818e+83 < z Initial program 15.8
rmApplied associate-/l*3.2
rmApplied div-inv3.2
Applied associate-/r*2.1
if -1.0170025935565398e-36 < z < 1.5650533979108818e+83Initial program 1.5
Final simplification1.7
herbie shell --seed 2019174
(FPCore (x y z t)
:name "Numeric.Histogram:binBounds from Chart-1.5.3"
:herbie-target
(if (< x -9.025511195533005e-135) (- x (* (/ z t) (- x y))) (if (< x 4.275032163700715e-250) (+ x (* (/ (- y x) t) z)) (+ x (/ (- y x) (/ t z)))))
(+ x (/ (* (- y x) z) t)))