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}\;\left(a + b \cdot c\right) \cdot c \le -3.366177053613654395798675960966992222011 \cdot 10^{198} \lor \neg \left(\left(a + b \cdot c\right) \cdot c \le 4.788215598584803852236065219824838534122 \cdot 10^{299}\right):\\
\;\;\;\;2 \cdot \left(\left(x \cdot y + z \cdot t\right) + \left(-\left(\left(a + b \cdot c\right) \cdot i\right) \cdot c\right)\right)\\
\mathbf{else}:\\
\;\;\;\;2 \cdot \left(\left(x \cdot y + z \cdot t\right) - \left(\left(a + b \cdot c\right) \cdot c\right) \cdot i\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c, double i) {
double r464630 = 2.0;
double r464631 = x;
double r464632 = y;
double r464633 = r464631 * r464632;
double r464634 = z;
double r464635 = t;
double r464636 = r464634 * r464635;
double r464637 = r464633 + r464636;
double r464638 = a;
double r464639 = b;
double r464640 = c;
double r464641 = r464639 * r464640;
double r464642 = r464638 + r464641;
double r464643 = r464642 * r464640;
double r464644 = i;
double r464645 = r464643 * r464644;
double r464646 = r464637 - r464645;
double r464647 = r464630 * r464646;
return r464647;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i) {
double r464648 = a;
double r464649 = b;
double r464650 = c;
double r464651 = r464649 * r464650;
double r464652 = r464648 + r464651;
double r464653 = r464652 * r464650;
double r464654 = -3.3661770536136544e+198;
bool r464655 = r464653 <= r464654;
double r464656 = 4.788215598584804e+299;
bool r464657 = r464653 <= r464656;
double r464658 = !r464657;
bool r464659 = r464655 || r464658;
double r464660 = 2.0;
double r464661 = x;
double r464662 = y;
double r464663 = r464661 * r464662;
double r464664 = z;
double r464665 = t;
double r464666 = r464664 * r464665;
double r464667 = r464663 + r464666;
double r464668 = i;
double r464669 = r464652 * r464668;
double r464670 = r464669 * r464650;
double r464671 = -r464670;
double r464672 = r464667 + r464671;
double r464673 = r464660 * r464672;
double r464674 = r464653 * r464668;
double r464675 = r464667 - r464674;
double r464676 = r464660 * r464675;
double r464677 = r464659 ? r464673 : r464676;
return r464677;
}




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.3 |
|---|---|
| Target | 1.7 |
| Herbie | 1.2 |
if (* (+ a (* b c)) c) < -3.3661770536136544e+198 or 4.788215598584804e+299 < (* (+ a (* b c)) c) Initial program 41.2
rmApplied sub-neg41.2
Simplified6.2
rmApplied distribute-rgt-neg-out6.2
Applied distribute-rgt-neg-out6.2
Simplified6.3
if -3.3661770536136544e+198 < (* (+ a (* b c)) c) < 4.788215598584804e+299Initial program 0.3
Final simplification1.2
herbie shell --seed 2019326
(FPCore (x y z t a b c i)
:name "Diagrams.ThreeD.Shapes:frustum from diagrams-lib-1.3.0.3, A"
:precision binary64
:herbie-target
(* 2 (- (+ (* x y) (* z t)) (* (+ a (* b c)) (* c i))))
(* 2 (- (+ (* x y) (* z t)) (* (* (+ a (* b c)) c) i))))