\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t}\begin{array}{l}
\mathbf{if}\;\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t} = -\infty:\\
\;\;\;\;\left(\sqrt[3]{\mathsf{fma}\left(y, \frac{t}{a - t} - \frac{z}{a - t}, y\right) + x} \cdot \sqrt[3]{\mathsf{fma}\left(y, \frac{t}{a - t} - \frac{z}{a - t}, y\right) + x}\right) \cdot \left(\left(\sqrt[3]{\sqrt[3]{\mathsf{fma}\left(y, \frac{t}{a - t} - \frac{z}{a - t}, y\right) + x}} \cdot \sqrt[3]{\sqrt[3]{\mathsf{fma}\left(y, \frac{t}{a - t} - \frac{z}{a - t}, y\right) + x}}\right) \cdot \sqrt[3]{\sqrt[3]{\mathsf{fma}\left(y, \frac{t}{a - t} - \frac{z}{a - t}, y\right) + x}}\right)\\
\mathbf{elif}\;\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t} \le -9.203641485734956442447032350818823636586 \cdot 10^{-277}:\\
\;\;\;\;\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t}\\
\mathbf{elif}\;\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t} \le 0.0:\\
\;\;\;\;\mathsf{fma}\left(\frac{z}{t}, y, x\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\sqrt[3]{\mathsf{fma}\left(y, \frac{t}{a - t} - \frac{z}{a - t}, y\right) + x} \cdot \sqrt[3]{\mathsf{fma}\left(y, \frac{t}{a - t} - \frac{z}{a - t}, y\right) + x}\right) \cdot \left(\left(\sqrt[3]{\sqrt[3]{\mathsf{fma}\left(y, \frac{t}{a - t} - \frac{z}{a - t}, y\right) + x}} \cdot \sqrt[3]{\sqrt[3]{\mathsf{fma}\left(y, \frac{t}{a - t} - \frac{z}{a - t}, y\right) + x}}\right) \cdot \sqrt[3]{\sqrt[3]{\mathsf{fma}\left(y, \frac{t}{a - t} - \frac{z}{a - t}, y\right) + x}}\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r340162 = x;
double r340163 = y;
double r340164 = r340162 + r340163;
double r340165 = z;
double r340166 = t;
double r340167 = r340165 - r340166;
double r340168 = r340167 * r340163;
double r340169 = a;
double r340170 = r340169 - r340166;
double r340171 = r340168 / r340170;
double r340172 = r340164 - r340171;
return r340172;
}
double f(double x, double y, double z, double t, double a) {
double r340173 = x;
double r340174 = y;
double r340175 = r340173 + r340174;
double r340176 = z;
double r340177 = t;
double r340178 = r340176 - r340177;
double r340179 = r340178 * r340174;
double r340180 = a;
double r340181 = r340180 - r340177;
double r340182 = r340179 / r340181;
double r340183 = r340175 - r340182;
double r340184 = -inf.0;
bool r340185 = r340183 <= r340184;
double r340186 = r340177 / r340181;
double r340187 = r340176 / r340181;
double r340188 = r340186 - r340187;
double r340189 = fma(r340174, r340188, r340174);
double r340190 = r340189 + r340173;
double r340191 = cbrt(r340190);
double r340192 = r340191 * r340191;
double r340193 = cbrt(r340191);
double r340194 = r340193 * r340193;
double r340195 = r340194 * r340193;
double r340196 = r340192 * r340195;
double r340197 = -9.203641485734956e-277;
bool r340198 = r340183 <= r340197;
double r340199 = 0.0;
bool r340200 = r340183 <= r340199;
double r340201 = r340176 / r340177;
double r340202 = fma(r340201, r340174, r340173);
double r340203 = r340200 ? r340202 : r340196;
double r340204 = r340198 ? r340183 : r340203;
double r340205 = r340185 ? r340196 : r340204;
return r340205;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 16.1 |
|---|---|
| Target | 8.1 |
| Herbie | 6.6 |
if (- (+ x y) (/ (* (- z t) y) (- a t))) < -inf.0 or 0.0 < (- (+ x y) (/ (* (- z t) y) (- a t))) Initial program 19.9
Simplified10.0
rmApplied div-sub9.9
rmApplied add-cube-cbrt10.1
Applied *-un-lft-identity10.1
Applied add-cube-cbrt10.2
Applied times-frac10.2
Applied prod-diff10.2
Simplified10.0
Simplified10.0
rmApplied add-cube-cbrt11.0
Simplified11.0
Simplified8.2
rmApplied add-cube-cbrt8.5
if -inf.0 < (- (+ x y) (/ (* (- z t) y) (- a t))) < -9.203641485734956e-277Initial program 1.3
if -9.203641485734956e-277 < (- (+ x y) (/ (* (- z t) y) (- a t))) < 0.0Initial program 60.5
Simplified60.5
Taylor expanded around inf 18.5
Simplified18.4
Final simplification6.6
herbie shell --seed 2019304 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisTick from plot-0.2.3.4, B"
:precision binary64
:herbie-target
(if (< (- (+ x y) (/ (* (- z t) y) (- a t))) -1.3664970889390727e-7) (- (+ y x) (* (* (- z t) (/ 1 (- a t))) y)) (if (< (- (+ x y) (/ (* (- z t) y) (- a t))) 1.47542934445772333e-239) (/ (- (* y (- a z)) (* x t)) (- a t)) (- (+ y x) (* (* (- z t) (/ 1 (- a t))) y))))
(- (+ x y) (/ (* (- z t) y) (- a t))))