x + \frac{\left(y - x\right) \cdot z}{t}\begin{array}{l}
\mathbf{if}\;t \leq -4.2474613733230925 \cdot 10^{-85}:\\
\;\;\;\;x + \left(y - x\right) \cdot \frac{z}{t}\\
\mathbf{elif}\;t \leq 4.798514676887594 \cdot 10^{-42}:\\
\;\;\;\;x + \frac{1}{\frac{t}{\left(y - x\right) \cdot z}}\\
\mathbf{else}:\\
\;\;\;\;x + z \cdot \frac{y - x}{t}\\
\end{array}(FPCore (x y z t) :precision binary64 (+ x (/ (* (- y x) z) t)))
(FPCore (x y z t)
:precision binary64
(if (<= t -4.2474613733230925e-85)
(+ x (* (- y x) (/ z t)))
(if (<= t 4.798514676887594e-42)
(+ x (/ 1.0 (/ t (* (- y x) z))))
(+ x (* z (/ (- y x) t))))))double code(double x, double y, double z, double t) {
return x + (((y - x) * z) / t);
}
double code(double x, double y, double z, double t) {
double tmp;
if (t <= -4.2474613733230925e-85) {
tmp = x + ((y - x) * (z / t));
} else if (t <= 4.798514676887594e-42) {
tmp = x + (1.0 / (t / ((y - x) * z)));
} else {
tmp = x + (z * ((y - x) / t));
}
return tmp;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.7 |
|---|---|
| Target | 2.3 |
| Herbie | 1.4 |
if t < -4.2474613733230925e-85Initial program 7.6
rmApplied *-un-lft-identity_binary64_128837.6
Applied times-frac_binary64_128891.1
Simplified1.1
if -4.2474613733230925e-85 < t < 4.7985146768875943e-42Initial program 2.1
rmApplied clear-num_binary64_128822.2
if 4.7985146768875943e-42 < t Initial program 9.4
rmApplied associate-/l*_binary64_128301.3
rmApplied associate-/r/_binary64_128311.1
Final simplification1.4
herbie shell --seed 2020281
(FPCore (x y z t)
:name "Numeric.Histogram:binBounds from Chart-1.5.3"
:precision binary64
: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)))