\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t}\begin{array}{l}
\mathbf{if}\;t \le -6.0989892354218388 \cdot 10^{126}:\\
\;\;\;\;x\\
\mathbf{elif}\;t \le 1.26285112774994464 \cdot 10^{220}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{a - t} \cdot y, t - z, x + y\right)\\
\mathbf{else}:\\
\;\;\;\;x\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r1105686 = x;
double r1105687 = y;
double r1105688 = r1105686 + r1105687;
double r1105689 = z;
double r1105690 = t;
double r1105691 = r1105689 - r1105690;
double r1105692 = r1105691 * r1105687;
double r1105693 = a;
double r1105694 = r1105693 - r1105690;
double r1105695 = r1105692 / r1105694;
double r1105696 = r1105688 - r1105695;
return r1105696;
}
double f(double x, double y, double z, double t, double a) {
double r1105697 = t;
double r1105698 = -6.098989235421839e+126;
bool r1105699 = r1105697 <= r1105698;
double r1105700 = x;
double r1105701 = 1.2628511277499446e+220;
bool r1105702 = r1105697 <= r1105701;
double r1105703 = 1.0;
double r1105704 = a;
double r1105705 = r1105704 - r1105697;
double r1105706 = r1105703 / r1105705;
double r1105707 = y;
double r1105708 = r1105706 * r1105707;
double r1105709 = z;
double r1105710 = r1105697 - r1105709;
double r1105711 = r1105700 + r1105707;
double r1105712 = fma(r1105708, r1105710, r1105711);
double r1105713 = r1105702 ? r1105712 : r1105700;
double r1105714 = r1105699 ? r1105700 : r1105713;
return r1105714;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 16.7 |
|---|---|
| Target | 8.5 |
| Herbie | 11.4 |
if t < -6.098989235421839e+126 or 1.2628511277499446e+220 < t Initial program 32.8
Simplified24.0
Taylor expanded around 0 21.1
if -6.098989235421839e+126 < t < 1.2628511277499446e+220Initial program 11.1
Simplified8.0
rmApplied clear-num8.1
rmApplied div-inv8.1
Applied add-cube-cbrt8.1
Applied times-frac8.0
Simplified8.0
Simplified8.0
Final simplification11.4
herbie shell --seed 2020025 +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))))