x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\begin{array}{l}
\mathbf{if}\;a \le -1.198410335343120851233733027827244153918 \cdot 10^{-46} \lor \neg \left(a \le 5.860858455533554327064444366829914979601 \cdot 10^{-230}\right):\\
\;\;\;\;x + \left(t - x\right) \cdot \left(\frac{1}{a - z} \cdot \left(y - z\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{x}{\frac{z}{y}} - \frac{t}{\frac{z}{y}}\right) + t\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r302460 = x;
double r302461 = y;
double r302462 = z;
double r302463 = r302461 - r302462;
double r302464 = t;
double r302465 = r302464 - r302460;
double r302466 = r302463 * r302465;
double r302467 = a;
double r302468 = r302467 - r302462;
double r302469 = r302466 / r302468;
double r302470 = r302460 + r302469;
return r302470;
}
double f(double x, double y, double z, double t, double a) {
double r302471 = a;
double r302472 = -1.1984103353431209e-46;
bool r302473 = r302471 <= r302472;
double r302474 = 5.860858455533554e-230;
bool r302475 = r302471 <= r302474;
double r302476 = !r302475;
bool r302477 = r302473 || r302476;
double r302478 = x;
double r302479 = t;
double r302480 = r302479 - r302478;
double r302481 = 1.0;
double r302482 = z;
double r302483 = r302471 - r302482;
double r302484 = r302481 / r302483;
double r302485 = y;
double r302486 = r302485 - r302482;
double r302487 = r302484 * r302486;
double r302488 = r302480 * r302487;
double r302489 = r302478 + r302488;
double r302490 = r302482 / r302485;
double r302491 = r302478 / r302490;
double r302492 = r302479 / r302490;
double r302493 = r302491 - r302492;
double r302494 = r302493 + r302479;
double r302495 = r302477 ? r302489 : r302494;
return r302495;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.9 |
|---|---|
| Target | 11.8 |
| Herbie | 10.1 |
if a < -1.1984103353431209e-46 or 5.860858455533554e-230 < a Initial program 23.7
Simplified9.3
rmApplied div-inv9.4
if -1.1984103353431209e-46 < a < 5.860858455533554e-230Initial program 28.7
Simplified18.9
rmApplied div-inv19.0
Taylor expanded around inf 18.1
Simplified12.5
Final simplification10.1
herbie shell --seed 2019174
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:invLinMap from Chart-1.5.3"
:herbie-target
(if (< z -1.2536131056095036e+188) (- t (* (/ y z) (- t x))) (if (< z 4.446702369113811e+64) (+ x (/ (- y z) (/ (- a z) (- t x)))) (- t (* (/ y z) (- t x)))))
(+ x (/ (* (- y z) (- t x)) (- a z))))