\left(x \cdot y - z \cdot y\right) \cdot t
\begin{array}{l}
\mathbf{if}\;t \le -6648838448.446291 \lor \neg \left(t \le 6.1434809147908996 \cdot 10^{33}\right):\\
\;\;\;\;t \cdot \left(x \cdot y\right) + \left(-t \cdot \left(z \cdot y\right)\right)\\
\mathbf{else}:\\
\;\;\;\;{\left(\left(t \cdot \left(x - z\right)\right) \cdot y\right)}^{1}\\
\end{array}double f(double x, double y, double z, double t) {
double r600951 = x;
double r600952 = y;
double r600953 = r600951 * r600952;
double r600954 = z;
double r600955 = r600954 * r600952;
double r600956 = r600953 - r600955;
double r600957 = t;
double r600958 = r600956 * r600957;
return r600958;
}
double f(double x, double y, double z, double t) {
double r600959 = t;
double r600960 = -6648838448.446291;
bool r600961 = r600959 <= r600960;
double r600962 = 6.1434809147909e+33;
bool r600963 = r600959 <= r600962;
double r600964 = !r600963;
bool r600965 = r600961 || r600964;
double r600966 = x;
double r600967 = y;
double r600968 = r600966 * r600967;
double r600969 = r600959 * r600968;
double r600970 = z;
double r600971 = r600970 * r600967;
double r600972 = r600959 * r600971;
double r600973 = -r600972;
double r600974 = r600969 + r600973;
double r600975 = r600966 - r600970;
double r600976 = r600959 * r600975;
double r600977 = r600976 * r600967;
double r600978 = 1.0;
double r600979 = pow(r600977, r600978);
double r600980 = r600965 ? r600974 : r600979;
return r600980;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 7.1 |
|---|---|
| Target | 3.2 |
| Herbie | 2.5 |
if t < -6648838448.446291 or 6.1434809147909e+33 < t Initial program 3.4
Simplified3.4
rmApplied add-cube-cbrt4.5
Applied associate-*l*4.5
rmApplied sub-neg4.5
Applied distribute-lft-in4.5
Applied distribute-lft-in4.5
Applied distribute-lft-in4.5
Simplified4.0
Simplified3.4
if -6648838448.446291 < t < 6.1434809147909e+33Initial program 9.0
Simplified9.0
rmApplied add-cube-cbrt9.8
Applied associate-*l*9.8
rmApplied pow19.8
Applied pow19.8
Applied pow-prod-down9.8
Applied pow19.8
Applied pow19.8
Applied pow-prod-down9.8
Applied pow-prod-down9.8
Applied pow19.8
Applied pow-prod-down9.8
Simplified2.0
Final simplification2.5
herbie shell --seed 2020083
(FPCore (x y z t)
:name "Linear.Projection:inverseInfinitePerspective from linear-1.19.1.3"
:precision binary64
:herbie-target
(if (< t -9.231879582886777e-80) (* (* y t) (- x z)) (if (< t 2.543067051564877e+83) (* y (* t (- x z))) (* (* y (- x z)) t)))
(* (- (* x y) (* z y)) t))