2 \cdot \left(\left(x \cdot y + z \cdot t\right) - \left(\left(a + b \cdot c\right) \cdot c\right) \cdot i\right)
\begin{array}{l}
\mathbf{if}\;i \le -2.926840426293390090061766031766601179458 \cdot 10^{-61}:\\
\;\;\;\;2 \cdot \left(\left(y \cdot x + z \cdot t\right) - i \cdot \left(c \cdot \left(a + c \cdot b\right)\right)\right)\\
\mathbf{elif}\;i \le 7.568213044503462274218583496034052027993 \cdot 10^{-168}:\\
\;\;\;\;2 \cdot \left(\left(\left(z \cdot t - \left(a \cdot i\right) \cdot c\right) + y \cdot x\right) - \left(\left(c \cdot i\right) \cdot c\right) \cdot b\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(y \cdot x + z \cdot t\right) - \sqrt[3]{\left(c \cdot i\right) \cdot \left(a + c \cdot b\right)} \cdot \left(\sqrt[3]{\left(c \cdot i\right) \cdot \left(a + c \cdot b\right)} \cdot \sqrt[3]{\left(c \cdot i\right) \cdot \left(a + c \cdot b\right)}\right)\right) \cdot 2\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c, double i) {
double r589351 = 2.0;
double r589352 = x;
double r589353 = y;
double r589354 = r589352 * r589353;
double r589355 = z;
double r589356 = t;
double r589357 = r589355 * r589356;
double r589358 = r589354 + r589357;
double r589359 = a;
double r589360 = b;
double r589361 = c;
double r589362 = r589360 * r589361;
double r589363 = r589359 + r589362;
double r589364 = r589363 * r589361;
double r589365 = i;
double r589366 = r589364 * r589365;
double r589367 = r589358 - r589366;
double r589368 = r589351 * r589367;
return r589368;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i) {
double r589369 = i;
double r589370 = -2.92684042629339e-61;
bool r589371 = r589369 <= r589370;
double r589372 = 2.0;
double r589373 = y;
double r589374 = x;
double r589375 = r589373 * r589374;
double r589376 = z;
double r589377 = t;
double r589378 = r589376 * r589377;
double r589379 = r589375 + r589378;
double r589380 = c;
double r589381 = a;
double r589382 = b;
double r589383 = r589380 * r589382;
double r589384 = r589381 + r589383;
double r589385 = r589380 * r589384;
double r589386 = r589369 * r589385;
double r589387 = r589379 - r589386;
double r589388 = r589372 * r589387;
double r589389 = 7.568213044503462e-168;
bool r589390 = r589369 <= r589389;
double r589391 = r589381 * r589369;
double r589392 = r589391 * r589380;
double r589393 = r589378 - r589392;
double r589394 = r589393 + r589375;
double r589395 = r589380 * r589369;
double r589396 = r589395 * r589380;
double r589397 = r589396 * r589382;
double r589398 = r589394 - r589397;
double r589399 = r589372 * r589398;
double r589400 = r589395 * r589384;
double r589401 = cbrt(r589400);
double r589402 = r589401 * r589401;
double r589403 = r589401 * r589402;
double r589404 = r589379 - r589403;
double r589405 = r589404 * r589372;
double r589406 = r589390 ? r589399 : r589405;
double r589407 = r589371 ? r589388 : r589406;
return r589407;
}




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
Results
| Original | 6.5 |
|---|---|
| Target | 2.1 |
| Herbie | 1.7 |
if i < -2.92684042629339e-61Initial program 1.3
Simplified1.3
if -2.92684042629339e-61 < i < 7.568213044503462e-168Initial program 12.5
Simplified12.5
rmApplied *-un-lft-identity12.5
Applied associate-*l*12.5
Simplified3.3
rmApplied distribute-lft-in3.3
Simplified2.7
Simplified2.1
rmApplied distribute-rgt-in2.1
Applied associate--r+2.1
Simplified2.1
if 7.568213044503462e-168 < i Initial program 3.3
Simplified3.3
rmApplied add-cube-cbrt3.6
Simplified4.5
Simplified1.7
Final simplification1.7
herbie shell --seed 2019174
(FPCore (x y z t a b c i)
:name "Diagrams.ThreeD.Shapes:frustum from diagrams-lib-1.3.0.3, A"
:herbie-target
(* 2.0 (- (+ (* x y) (* z t)) (* (+ a (* b c)) (* c i))))
(* 2.0 (- (+ (* x y) (* z t)) (* (* (+ a (* b c)) c) i))))