x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\begin{array}{l}
\mathbf{if}\;a \le -2.303115495338194376941539756876286948596 \cdot 10^{-89} \lor \neg \left(a \le 9.399741012957091794694252310132614356479 \cdot 10^{-155}\right):\\
\;\;\;\;x + \left(t - x\right) \cdot \left(\frac{y}{a - z} - \frac{z}{a - z}\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{x}{\frac{z}{y}} - y \cdot \frac{t}{z}\right) + t\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r474756 = x;
double r474757 = y;
double r474758 = z;
double r474759 = r474757 - r474758;
double r474760 = t;
double r474761 = r474760 - r474756;
double r474762 = r474759 * r474761;
double r474763 = a;
double r474764 = r474763 - r474758;
double r474765 = r474762 / r474764;
double r474766 = r474756 + r474765;
return r474766;
}
double f(double x, double y, double z, double t, double a) {
double r474767 = a;
double r474768 = -2.3031154953381944e-89;
bool r474769 = r474767 <= r474768;
double r474770 = 9.399741012957092e-155;
bool r474771 = r474767 <= r474770;
double r474772 = !r474771;
bool r474773 = r474769 || r474772;
double r474774 = x;
double r474775 = t;
double r474776 = r474775 - r474774;
double r474777 = y;
double r474778 = z;
double r474779 = r474767 - r474778;
double r474780 = r474777 / r474779;
double r474781 = r474778 / r474779;
double r474782 = r474780 - r474781;
double r474783 = r474776 * r474782;
double r474784 = r474774 + r474783;
double r474785 = r474778 / r474777;
double r474786 = r474774 / r474785;
double r474787 = r474775 / r474778;
double r474788 = r474777 * r474787;
double r474789 = r474786 - r474788;
double r474790 = r474789 + r474775;
double r474791 = r474773 ? r474784 : r474790;
return r474791;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.8 |
|---|---|
| Target | 12.1 |
| Herbie | 9.9 |
if a < -2.3031154953381944e-89 or 9.399741012957092e-155 < a Initial program 23.0
Simplified8.6
rmApplied div-sub8.6
if -2.3031154953381944e-89 < a < 9.399741012957092e-155Initial program 29.7
Simplified20.0
Taylor expanded around inf 15.7
Simplified13.1
Final simplification9.9
herbie shell --seed 2019195
(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))))