x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;a \le -3.21462567963864648214684556864782241168 \cdot 10^{-139} \lor \neg \left(a \le 9.616031131563334674698731158316533821258 \cdot 10^{-161}\right):\\
\;\;\;\;x + \left(y - x\right) \cdot \frac{1}{\frac{a - t}{z - 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 r530457 = x;
double r530458 = y;
double r530459 = r530458 - r530457;
double r530460 = z;
double r530461 = t;
double r530462 = r530460 - r530461;
double r530463 = r530459 * r530462;
double r530464 = a;
double r530465 = r530464 - r530461;
double r530466 = r530463 / r530465;
double r530467 = r530457 + r530466;
return r530467;
}
double f(double x, double y, double z, double t, double a) {
double r530468 = a;
double r530469 = -3.2146256796386465e-139;
bool r530470 = r530468 <= r530469;
double r530471 = 9.616031131563335e-161;
bool r530472 = r530468 <= r530471;
double r530473 = !r530472;
bool r530474 = r530470 || r530473;
double r530475 = x;
double r530476 = y;
double r530477 = r530476 - r530475;
double r530478 = 1.0;
double r530479 = t;
double r530480 = r530468 - r530479;
double r530481 = z;
double r530482 = r530481 - r530479;
double r530483 = r530480 / r530482;
double r530484 = r530478 / r530483;
double r530485 = r530477 * r530484;
double r530486 = r530475 + r530485;
double r530487 = r530475 * r530481;
double r530488 = r530487 / r530479;
double r530489 = r530476 + r530488;
double r530490 = r530481 * r530476;
double r530491 = r530490 / r530479;
double r530492 = r530489 - r530491;
double r530493 = r530474 ? r530486 : r530492;
return r530493;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.4 |
|---|---|
| Target | 9.1 |
| Herbie | 9.9 |
if a < -3.2146256796386465e-139 or 9.616031131563335e-161 < a Initial program 22.9
rmApplied associate-/l*9.2
rmApplied pow19.2
rmApplied div-inv9.2
Simplified9.2
if -3.2146256796386465e-139 < a < 9.616031131563335e-161Initial program 29.6
Taylor expanded around inf 12.4
Final simplification9.9
herbie shell --seed 2019208
(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.7744031700831742e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t))))))
(+ x (/ (* (- y x) (- z t)) (- a t))))