\frac{\left(\left(x \cdot 9\right) \cdot y - \left(\left(z \cdot 4\right) \cdot t\right) \cdot a\right) + b}{z \cdot c}\begin{array}{l}
\mathbf{if}\;\frac{\left(\left(x \cdot 9\right) \cdot y - \left(\left(z \cdot 4\right) \cdot t\right) \cdot a\right) + b}{z \cdot c} = -\infty:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{\frac{z \cdot c}{y}}, 9, \frac{b}{z \cdot c}\right) - \frac{\left(a \cdot 4\right) \cdot t}{c}\\
\mathbf{elif}\;\frac{\left(\left(x \cdot 9\right) \cdot y - \left(\left(z \cdot 4\right) \cdot t\right) \cdot a\right) + b}{z \cdot c} \le -3.806721957017680858881585199397795276301 \cdot 10^{-283}:\\
\;\;\;\;\frac{\left(\left(x \cdot 9\right) \cdot y - \left(\left(z \cdot 4\right) \cdot t\right) \cdot a\right) + b}{z \cdot c}\\
\mathbf{elif}\;\frac{\left(\left(x \cdot 9\right) \cdot y - \left(\left(z \cdot 4\right) \cdot t\right) \cdot a\right) + b}{z \cdot c} \le -0.0:\\
\;\;\;\;\left(\frac{\mathsf{fma}\left(y, x \cdot 9, b\right)}{z} - \left(a \cdot 4\right) \cdot t\right) \cdot \frac{1}{c}\\
\mathbf{elif}\;\frac{\left(\left(x \cdot 9\right) \cdot y - \left(\left(z \cdot 4\right) \cdot t\right) \cdot a\right) + b}{z \cdot c} \le 1.814053920823523978195989056964182842962 \cdot 10^{303}:\\
\;\;\;\;\frac{\left(\left(x \cdot 9\right) \cdot y - \left(\left(z \cdot 4\right) \cdot t\right) \cdot a\right) + b}{z \cdot c}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{z} \cdot \frac{y}{c}, 9, \frac{b}{z \cdot c}\right) - \frac{a \cdot 4}{\frac{c}{t}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c) {
double r816198 = x;
double r816199 = 9.0;
double r816200 = r816198 * r816199;
double r816201 = y;
double r816202 = r816200 * r816201;
double r816203 = z;
double r816204 = 4.0;
double r816205 = r816203 * r816204;
double r816206 = t;
double r816207 = r816205 * r816206;
double r816208 = a;
double r816209 = r816207 * r816208;
double r816210 = r816202 - r816209;
double r816211 = b;
double r816212 = r816210 + r816211;
double r816213 = c;
double r816214 = r816203 * r816213;
double r816215 = r816212 / r816214;
return r816215;
}
double f(double x, double y, double z, double t, double a, double b, double c) {
double r816216 = x;
double r816217 = 9.0;
double r816218 = r816216 * r816217;
double r816219 = y;
double r816220 = r816218 * r816219;
double r816221 = z;
double r816222 = 4.0;
double r816223 = r816221 * r816222;
double r816224 = t;
double r816225 = r816223 * r816224;
double r816226 = a;
double r816227 = r816225 * r816226;
double r816228 = r816220 - r816227;
double r816229 = b;
double r816230 = r816228 + r816229;
double r816231 = c;
double r816232 = r816221 * r816231;
double r816233 = r816230 / r816232;
double r816234 = -inf.0;
bool r816235 = r816233 <= r816234;
double r816236 = r816232 / r816219;
double r816237 = r816216 / r816236;
double r816238 = r816229 / r816232;
double r816239 = fma(r816237, r816217, r816238);
double r816240 = r816226 * r816222;
double r816241 = r816240 * r816224;
double r816242 = r816241 / r816231;
double r816243 = r816239 - r816242;
double r816244 = -3.806721957017681e-283;
bool r816245 = r816233 <= r816244;
double r816246 = -0.0;
bool r816247 = r816233 <= r816246;
double r816248 = fma(r816219, r816218, r816229);
double r816249 = r816248 / r816221;
double r816250 = r816249 - r816241;
double r816251 = 1.0;
double r816252 = r816251 / r816231;
double r816253 = r816250 * r816252;
double r816254 = 1.814053920823524e+303;
bool r816255 = r816233 <= r816254;
double r816256 = r816216 / r816221;
double r816257 = r816219 / r816231;
double r816258 = r816256 * r816257;
double r816259 = fma(r816258, r816217, r816238);
double r816260 = r816231 / r816224;
double r816261 = r816240 / r816260;
double r816262 = r816259 - r816261;
double r816263 = r816255 ? r816233 : r816262;
double r816264 = r816247 ? r816253 : r816263;
double r816265 = r816245 ? r816233 : r816264;
double r816266 = r816235 ? r816243 : r816265;
return r816266;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 20.2 |
|---|---|
| Target | 14.6 |
| Herbie | 3.4 |
if (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < -inf.0Initial program 64.0
Simplified27.3
Taylor expanded around 0 32.8
Simplified32.8
rmApplied associate-/l*15.3
if -inf.0 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < -3.806721957017681e-283 or -0.0 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < 1.814053920823524e+303Initial program 3.7
if -3.806721957017681e-283 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) < -0.0Initial program 33.4
Simplified0.6
rmApplied div-inv0.7
if 1.814053920823524e+303 < (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) Initial program 62.9
Simplified28.5
Taylor expanded around 0 32.4
Simplified32.5
rmApplied associate-/l*26.3
rmApplied times-frac10.3
Final simplification3.4
herbie shell --seed 2019209 +o rules:numerics
(FPCore (x y z t a b c)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, J"
:precision binary64
:herbie-target
(if (< (/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) (* z c)) -1.1001567408041049e-171) (/ (+ (- (* (* x 9) y) (* (* z 4) (* t a))) b) (* z c)) (if (< (/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) (* z c)) -0.0) (/ (/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) z) c) (if (< (/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) (* z c)) 1.17088779117474882e-53) (/ (+ (- (* (* x 9) y) (* (* z 4) (* t a))) b) (* z c)) (if (< (/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) (* z c)) 2.8768236795461372e130) (- (+ (* (* 9 (/ y c)) (/ x z)) (/ b (* c z))) (* 4 (/ (* a t) c))) (if (< (/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) (* z c)) 1.3838515042456319e158) (/ (+ (- (* (* x 9) y) (* (* z 4) (* t a))) b) (* z c)) (- (+ (* 9 (* (/ y (* c z)) x)) (/ b (* c z))) (* 4 (/ (* a t) c))))))))
(/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) (* z c)))