\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} \le -1.272792786955583 \cdot 10^{-212} \lor \neg \left(\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t} \le 0.0\right):\\
\;\;\;\;x + \mathsf{fma}\left(\frac{t}{a - t} - z \cdot \frac{1}{a - t}, y, y\right)\\
\mathbf{else}:\\
\;\;\;\;x + \frac{z \cdot y}{t}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r535125 = x;
double r535126 = y;
double r535127 = r535125 + r535126;
double r535128 = z;
double r535129 = t;
double r535130 = r535128 - r535129;
double r535131 = r535130 * r535126;
double r535132 = a;
double r535133 = r535132 - r535129;
double r535134 = r535131 / r535133;
double r535135 = r535127 - r535134;
return r535135;
}
double f(double x, double y, double z, double t, double a) {
double r535136 = x;
double r535137 = y;
double r535138 = r535136 + r535137;
double r535139 = z;
double r535140 = t;
double r535141 = r535139 - r535140;
double r535142 = r535141 * r535137;
double r535143 = a;
double r535144 = r535143 - r535140;
double r535145 = r535142 / r535144;
double r535146 = r535138 - r535145;
double r535147 = -1.272792786955583e-212;
bool r535148 = r535146 <= r535147;
double r535149 = 0.0;
bool r535150 = r535146 <= r535149;
double r535151 = !r535150;
bool r535152 = r535148 || r535151;
double r535153 = r535140 / r535144;
double r535154 = 1.0;
double r535155 = r535154 / r535144;
double r535156 = r535139 * r535155;
double r535157 = r535153 - r535156;
double r535158 = fma(r535157, r535137, r535137);
double r535159 = r535136 + r535158;
double r535160 = r535139 * r535137;
double r535161 = r535160 / r535140;
double r535162 = r535136 + r535161;
double r535163 = r535152 ? r535159 : r535162;
return r535163;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 16.8 |
|---|---|
| Target | 8.6 |
| Herbie | 6.6 |
if (- (+ x y) (/ (* (- z t) y) (- a t))) < -1.272792786955583e-212 or 0.0 < (- (+ x y) (/ (* (- z t) y) (- a t))) Initial program 12.9
Simplified5.2
rmApplied div-sub5.2
rmApplied div-inv5.2
if -1.272792786955583e-212 < (- (+ x y) (/ (* (- z t) y) (- a t))) < 0.0Initial program 55.9
Simplified33.0
Taylor expanded around inf 20.8
Final simplification6.6
herbie shell --seed 2020045 +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-07) (- (+ y x) (* (* (- z t) (/ 1 (- a t))) y)) (if (< (- (+ x y) (/ (* (- z t) y) (- a t))) 1.4754293444577233e-239) (/ (- (* y (- a z)) (* x t)) (- a t)) (- (+ y x) (* (* (- z t) (/ 1 (- a t))) y))))
(- (+ x y) (/ (* (- z t) y) (- a t))))