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(c \cdot b + a\right) \cdot c \le -2.816503233649596575999453222322489854615 \cdot 10^{286} \lor \neg \left(\left(c \cdot b + a\right) \cdot c \le 2.512868147830362656060006320039326628222 \cdot 10^{304}\right):\\
\;\;\;\;2 \cdot \left(\left(x \cdot y + t \cdot z\right) - \mathsf{fma}\left(\left(c \cdot i\right) \cdot b, c, a \cdot \left(c \cdot i\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;2 \cdot \left(\left(x \cdot y + t \cdot z\right) - i \cdot \left(\left(c \cdot b + a\right) \cdot c\right)\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c, double i) {
double r965290 = 2.0;
double r965291 = x;
double r965292 = y;
double r965293 = r965291 * r965292;
double r965294 = z;
double r965295 = t;
double r965296 = r965294 * r965295;
double r965297 = r965293 + r965296;
double r965298 = a;
double r965299 = b;
double r965300 = c;
double r965301 = r965299 * r965300;
double r965302 = r965298 + r965301;
double r965303 = r965302 * r965300;
double r965304 = i;
double r965305 = r965303 * r965304;
double r965306 = r965297 - r965305;
double r965307 = r965290 * r965306;
return r965307;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i) {
double r965308 = c;
double r965309 = b;
double r965310 = r965308 * r965309;
double r965311 = a;
double r965312 = r965310 + r965311;
double r965313 = r965312 * r965308;
double r965314 = -2.8165032336495966e+286;
bool r965315 = r965313 <= r965314;
double r965316 = 2.5128681478303627e+304;
bool r965317 = r965313 <= r965316;
double r965318 = !r965317;
bool r965319 = r965315 || r965318;
double r965320 = 2.0;
double r965321 = x;
double r965322 = y;
double r965323 = r965321 * r965322;
double r965324 = t;
double r965325 = z;
double r965326 = r965324 * r965325;
double r965327 = r965323 + r965326;
double r965328 = i;
double r965329 = r965308 * r965328;
double r965330 = r965329 * r965309;
double r965331 = r965311 * r965329;
double r965332 = fma(r965330, r965308, r965331);
double r965333 = r965327 - r965332;
double r965334 = r965320 * r965333;
double r965335 = r965328 * r965313;
double r965336 = r965327 - r965335;
double r965337 = r965320 * r965336;
double r965338 = r965319 ? r965334 : r965337;
return r965338;
}




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
| Original | 6.3 |
|---|---|
| Target | 1.8 |
| Herbie | 0.3 |
if (* (+ a (* b c)) c) < -2.8165032336495966e+286 or 2.5128681478303627e+304 < (* (+ a (* b c)) c) Initial program 56.7
Taylor expanded around inf 51.9
Simplified4.4
rmApplied pow14.4
Applied pow14.4
Applied pow14.4
Applied pow-prod-down4.4
Applied pow-prod-down4.4
Simplified0.3
if -2.8165032336495966e+286 < (* (+ a (* b c)) c) < 2.5128681478303627e+304Initial program 0.3
Final simplification0.3
herbie shell --seed 2019196 +o rules:numerics
(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))))