\left(x \cdot y - z \cdot y\right) \cdot t
\left(t \cdot y\right) \cdot \left(x - z\right)
double f(double x, double y, double z, double t) {
double r378801 = x;
double r378802 = y;
double r378803 = r378801 * r378802;
double r378804 = z;
double r378805 = r378804 * r378802;
double r378806 = r378803 - r378805;
double r378807 = t;
double r378808 = r378806 * r378807;
return r378808;
}
double f(double x, double y, double z, double t) {
double r378809 = t;
double r378810 = y;
double r378811 = r378809 * r378810;
double r378812 = x;
double r378813 = z;
double r378814 = r378812 - r378813;
double r378815 = r378811 * r378814;
return r378815;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.9 |
|---|---|
| Target | 3.2 |
| Herbie | 6.4 |
if y < -3.4758948727223214e-17 or 3.827097534379675e+84 < y Initial program 16.2
Simplified16.2
rmApplied associate-*r*3.9
if -3.4758948727223214e-17 < y < 3.827097534379675e+84Initial program 2.4
Simplified2.4
rmApplied *-commutative2.4
Final simplification6.4
herbie shell --seed 2019303
(FPCore (x y z t)
:name "Linear.Projection:inverseInfinitePerspective from linear-1.19.1.3"
:precision binary64
:herbie-target
(if (< t -9.2318795828867769e-80) (* (* y t) (- x z)) (if (< t 2.5430670515648771e83) (* y (* t (- x z))) (* (* y (- x z)) t)))
(* (- (* x y) (* z y)) t))