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 -7.692583286648856110943462438045554472035 \cdot 10^{-190}:\\
\;\;\;\;2 \cdot \left(\left(x \cdot y + z \cdot t\right) - \left(\left(\left(\sqrt[3]{\sqrt[3]{a + b \cdot c} \cdot \sqrt[3]{a + b \cdot c}} \cdot \sqrt[3]{\sqrt[3]{a + b \cdot c}}\right) \cdot \sqrt[3]{a + b \cdot c}\right) \cdot \sqrt[3]{a + b \cdot c}\right) \cdot \left(i \cdot c\right)\right)\\
\mathbf{elif}\;i \le 1.593063746275239271688708220689758329787 \cdot 10^{-232}:\\
\;\;\;\;2 \cdot \left(\left(x \cdot y + z \cdot t\right) - c \cdot \left(a \cdot i + \left(i \cdot b\right) \cdot c\right)\right)\\
\mathbf{else}:\\
\;\;\;\;2 \cdot \left(\left(x \cdot y + z \cdot t\right) - \left(\sqrt[3]{a + b \cdot c} \cdot \sqrt[3]{a + b \cdot c}\right) \cdot \left(\sqrt[3]{a + b \cdot c} \cdot \left(i \cdot c\right)\right)\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c, double i) {
double r550056 = 2.0;
double r550057 = x;
double r550058 = y;
double r550059 = r550057 * r550058;
double r550060 = z;
double r550061 = t;
double r550062 = r550060 * r550061;
double r550063 = r550059 + r550062;
double r550064 = a;
double r550065 = b;
double r550066 = c;
double r550067 = r550065 * r550066;
double r550068 = r550064 + r550067;
double r550069 = r550068 * r550066;
double r550070 = i;
double r550071 = r550069 * r550070;
double r550072 = r550063 - r550071;
double r550073 = r550056 * r550072;
return r550073;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i) {
double r550074 = i;
double r550075 = -7.692583286648856e-190;
bool r550076 = r550074 <= r550075;
double r550077 = 2.0;
double r550078 = x;
double r550079 = y;
double r550080 = r550078 * r550079;
double r550081 = z;
double r550082 = t;
double r550083 = r550081 * r550082;
double r550084 = r550080 + r550083;
double r550085 = a;
double r550086 = b;
double r550087 = c;
double r550088 = r550086 * r550087;
double r550089 = r550085 + r550088;
double r550090 = cbrt(r550089);
double r550091 = r550090 * r550090;
double r550092 = cbrt(r550091);
double r550093 = cbrt(r550090);
double r550094 = r550092 * r550093;
double r550095 = r550094 * r550090;
double r550096 = r550095 * r550090;
double r550097 = r550074 * r550087;
double r550098 = r550096 * r550097;
double r550099 = r550084 - r550098;
double r550100 = r550077 * r550099;
double r550101 = 1.5930637462752393e-232;
bool r550102 = r550074 <= r550101;
double r550103 = r550085 * r550074;
double r550104 = r550074 * r550086;
double r550105 = r550104 * r550087;
double r550106 = r550103 + r550105;
double r550107 = r550087 * r550106;
double r550108 = r550084 - r550107;
double r550109 = r550077 * r550108;
double r550110 = r550090 * r550097;
double r550111 = r550091 * r550110;
double r550112 = r550084 - r550111;
double r550113 = r550077 * r550112;
double r550114 = r550102 ? r550109 : r550113;
double r550115 = r550076 ? r550100 : r550114;
return r550115;
}




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.7 |
|---|---|
| Target | 2.0 |
| Herbie | 1.8 |
if i < -7.692583286648856e-190Initial program 4.3
rmApplied associate-*l*1.4
Simplified1.4
rmApplied add-cube-cbrt1.8
rmApplied add-cube-cbrt1.8
Applied cbrt-prod1.8
if -7.692583286648856e-190 < i < 1.5930637462752393e-232Initial program 15.2
rmApplied associate-*l*4.2
Simplified4.2
rmApplied add-cube-cbrt4.4
Applied associate-*l*4.4
Taylor expanded around inf 16.4
Simplified1.8
if 1.5930637462752393e-232 < i Initial program 4.5
rmApplied associate-*l*1.4
Simplified1.4
rmApplied add-cube-cbrt1.7
Applied associate-*l*1.7
Final simplification1.8
herbie shell --seed 2019208
(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))))