x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\begin{array}{l}
\mathbf{if}\;z \le -1.72473621819271822983298906704764536646 \cdot 10^{278}:\\
\;\;\;\;\mathsf{fma}\left(y, \frac{x}{z}, t - \frac{y}{\frac{z}{t}}\right)\\
\mathbf{elif}\;z \le 2.352105029248821724688499574476619091463 \cdot 10^{184}:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{a - z} - \frac{\sqrt[3]{z} \cdot \sqrt[3]{z}}{\frac{a - z}{\sqrt[3]{z}}}, t - x, x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(y, \frac{x}{z}, t - \frac{y}{\frac{z}{t}}\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r26910107 = x;
double r26910108 = y;
double r26910109 = z;
double r26910110 = r26910108 - r26910109;
double r26910111 = t;
double r26910112 = r26910111 - r26910107;
double r26910113 = r26910110 * r26910112;
double r26910114 = a;
double r26910115 = r26910114 - r26910109;
double r26910116 = r26910113 / r26910115;
double r26910117 = r26910107 + r26910116;
return r26910117;
}
double f(double x, double y, double z, double t, double a) {
double r26910118 = z;
double r26910119 = -1.7247362181927182e+278;
bool r26910120 = r26910118 <= r26910119;
double r26910121 = y;
double r26910122 = x;
double r26910123 = r26910122 / r26910118;
double r26910124 = t;
double r26910125 = r26910118 / r26910124;
double r26910126 = r26910121 / r26910125;
double r26910127 = r26910124 - r26910126;
double r26910128 = fma(r26910121, r26910123, r26910127);
double r26910129 = 2.3521050292488217e+184;
bool r26910130 = r26910118 <= r26910129;
double r26910131 = a;
double r26910132 = r26910131 - r26910118;
double r26910133 = r26910121 / r26910132;
double r26910134 = cbrt(r26910118);
double r26910135 = r26910134 * r26910134;
double r26910136 = r26910132 / r26910134;
double r26910137 = r26910135 / r26910136;
double r26910138 = r26910133 - r26910137;
double r26910139 = r26910124 - r26910122;
double r26910140 = fma(r26910138, r26910139, r26910122);
double r26910141 = r26910130 ? r26910140 : r26910128;
double r26910142 = r26910120 ? r26910128 : r26910141;
return r26910142;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 24.8 |
|---|---|
| Target | 12.0 |
| Herbie | 10.4 |
if z < -1.7247362181927182e+278 or 2.3521050292488217e+184 < z Initial program 51.2
Simplified24.7
Taylor expanded around inf 23.6
Simplified13.5
if -1.7247362181927182e+278 < z < 2.3521050292488217e+184Initial program 20.2
Simplified9.6
rmApplied div-sub9.6
rmApplied add-cube-cbrt9.9
Applied associate-/l*9.9
Final simplification10.4
herbie shell --seed 2019200 +o rules:numerics
(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))))