\left(\left(\left(\left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot z\right) \cdot t - \left(a \cdot 4\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - \left(j \cdot 27\right) \cdot k
\begin{array}{l}
\mathbf{if}\;t \le -6.4288223988477578 \cdot 10^{-37} \lor \neg \left(t \le 2.64647452676486563 \cdot 10^{-55}\right):\\
\;\;\;\;\mathsf{fma}\left(t, \left(\left(x \cdot 18\right) \cdot y\right) \cdot z - a \cdot 4, b \cdot c - \mathsf{fma}\left(x, 4 \cdot i, j \cdot \left(27 \cdot k\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(\left(x \cdot 18\right) \cdot \left(y \cdot \left(z \cdot t\right)\right) - \left(a \cdot 4\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - \left(j \cdot 27\right) \cdot k\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r668282 = x;
double r668283 = 18.0;
double r668284 = r668282 * r668283;
double r668285 = y;
double r668286 = r668284 * r668285;
double r668287 = z;
double r668288 = r668286 * r668287;
double r668289 = t;
double r668290 = r668288 * r668289;
double r668291 = a;
double r668292 = 4.0;
double r668293 = r668291 * r668292;
double r668294 = r668293 * r668289;
double r668295 = r668290 - r668294;
double r668296 = b;
double r668297 = c;
double r668298 = r668296 * r668297;
double r668299 = r668295 + r668298;
double r668300 = r668282 * r668292;
double r668301 = i;
double r668302 = r668300 * r668301;
double r668303 = r668299 - r668302;
double r668304 = j;
double r668305 = 27.0;
double r668306 = r668304 * r668305;
double r668307 = k;
double r668308 = r668306 * r668307;
double r668309 = r668303 - r668308;
return r668309;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r668310 = t;
double r668311 = -6.428822398847758e-37;
bool r668312 = r668310 <= r668311;
double r668313 = 2.6464745267648656e-55;
bool r668314 = r668310 <= r668313;
double r668315 = !r668314;
bool r668316 = r668312 || r668315;
double r668317 = x;
double r668318 = 18.0;
double r668319 = r668317 * r668318;
double r668320 = y;
double r668321 = r668319 * r668320;
double r668322 = z;
double r668323 = r668321 * r668322;
double r668324 = a;
double r668325 = 4.0;
double r668326 = r668324 * r668325;
double r668327 = r668323 - r668326;
double r668328 = b;
double r668329 = c;
double r668330 = r668328 * r668329;
double r668331 = i;
double r668332 = r668325 * r668331;
double r668333 = j;
double r668334 = 27.0;
double r668335 = k;
double r668336 = r668334 * r668335;
double r668337 = r668333 * r668336;
double r668338 = fma(r668317, r668332, r668337);
double r668339 = r668330 - r668338;
double r668340 = fma(r668310, r668327, r668339);
double r668341 = r668322 * r668310;
double r668342 = r668320 * r668341;
double r668343 = r668319 * r668342;
double r668344 = r668326 * r668310;
double r668345 = r668343 - r668344;
double r668346 = r668345 + r668330;
double r668347 = r668317 * r668325;
double r668348 = r668347 * r668331;
double r668349 = r668346 - r668348;
double r668350 = r668333 * r668334;
double r668351 = r668350 * r668335;
double r668352 = r668349 - r668351;
double r668353 = r668316 ? r668340 : r668352;
return r668353;
}




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




Bits error versus i




Bits error versus j




Bits error versus k
| Original | 5.3 |
|---|---|
| Target | 1.5 |
| Herbie | 1.8 |
if t < -6.428822398847758e-37 or 2.6464745267648656e-55 < t Initial program 2.1
Simplified2.1
rmApplied associate-*l*2.2
if -6.428822398847758e-37 < t < 2.6464745267648656e-55Initial program 8.1
rmApplied associate-*l*4.3
rmApplied associate-*l*1.5
Final simplification1.8
herbie shell --seed 2020062 +o rules:numerics
(FPCore (x y z t a b c i j k)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, E"
:precision binary64
:herbie-target
(if (< t -1.6210815397541398e-69) (- (- (* (* 18 t) (* (* x y) z)) (* (+ (* a t) (* i x)) 4)) (- (* (* k j) 27) (* c b))) (if (< t 165.68027943805222) (+ (- (* (* 18 y) (* x (* z t))) (* (+ (* a t) (* i x)) 4)) (- (* c b) (* 27 (* k j)))) (- (- (* (* 18 t) (* (* x y) z)) (* (+ (* a t) (* i x)) 4)) (- (* (* k j) 27) (* c b)))))
(- (- (+ (- (* (* (* (* x 18) y) z) t) (* (* a 4) t)) (* b c)) (* (* x 4) i)) (* (* j 27) k)))