x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;t \le 2.34703852665204316 \cdot 10^{195}:\\
\;\;\;\;x + \left(y - x\right) \cdot \frac{z - t}{a - t}\\
\mathbf{else}:\\
\;\;\;\;\left(y + \frac{x \cdot z}{t}\right) - \frac{z \cdot y}{t}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r795324 = x;
double r795325 = y;
double r795326 = r795325 - r795324;
double r795327 = z;
double r795328 = t;
double r795329 = r795327 - r795328;
double r795330 = r795326 * r795329;
double r795331 = a;
double r795332 = r795331 - r795328;
double r795333 = r795330 / r795332;
double r795334 = r795324 + r795333;
return r795334;
}
double f(double x, double y, double z, double t, double a) {
double r795335 = t;
double r795336 = 2.347038526652043e+195;
bool r795337 = r795335 <= r795336;
double r795338 = x;
double r795339 = y;
double r795340 = r795339 - r795338;
double r795341 = z;
double r795342 = r795341 - r795335;
double r795343 = a;
double r795344 = r795343 - r795335;
double r795345 = r795342 / r795344;
double r795346 = r795340 * r795345;
double r795347 = r795338 + r795346;
double r795348 = r795338 * r795341;
double r795349 = r795348 / r795335;
double r795350 = r795339 + r795349;
double r795351 = r795341 * r795339;
double r795352 = r795351 / r795335;
double r795353 = r795350 - r795352;
double r795354 = r795337 ? r795347 : r795353;
return r795354;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 25.2 |
|---|---|
| Target | 9.4 |
| Herbie | 12.1 |
if t < 2.347038526652043e+195Initial program 22.0
rmApplied *-un-lft-identity22.0
Applied times-frac10.5
Simplified10.5
if 2.347038526652043e+195 < t Initial program 51.6
Taylor expanded around inf 25.4
Final simplification12.1
herbie shell --seed 2020060
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:linMap from Chart-1.5.3"
:precision binary64
:herbie-target
(if (< a -1.6153062845442575e-142) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t)))) (if (< a 3.774403170083174e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t))))))
(+ x (/ (* (- y x) (- z t)) (- a t))))