\frac{x \cdot 2.0}{y \cdot z - t \cdot z}\begin{array}{l}
\mathbf{if}\;y \cdot z - t \cdot z \le -7.495229651452796 \cdot 10^{+234}:\\
\;\;\;\;\frac{2.0 \cdot \frac{x}{z}}{y - t}\\
\mathbf{elif}\;y \cdot z - t \cdot z \le -3.656744704766576 \cdot 10^{-231}:\\
\;\;\;\;\frac{x \cdot 2.0}{y \cdot z - t \cdot z}\\
\mathbf{elif}\;y \cdot z - t \cdot z \le 2.5855176954021 \cdot 10^{-311}:\\
\;\;\;\;\frac{2.0 \cdot \frac{x}{z}}{y - t}\\
\mathbf{elif}\;y \cdot z - t \cdot z \le 3.36468310649941 \cdot 10^{+210}:\\
\;\;\;\;\frac{x \cdot 2.0}{y \cdot z - t \cdot z}\\
\mathbf{else}:\\
\;\;\;\;\frac{2.0 \cdot \frac{x}{z}}{y - t}\\
\end{array}double f(double x, double y, double z, double t) {
double r18149323 = x;
double r18149324 = 2.0;
double r18149325 = r18149323 * r18149324;
double r18149326 = y;
double r18149327 = z;
double r18149328 = r18149326 * r18149327;
double r18149329 = t;
double r18149330 = r18149329 * r18149327;
double r18149331 = r18149328 - r18149330;
double r18149332 = r18149325 / r18149331;
return r18149332;
}
double f(double x, double y, double z, double t) {
double r18149333 = y;
double r18149334 = z;
double r18149335 = r18149333 * r18149334;
double r18149336 = t;
double r18149337 = r18149336 * r18149334;
double r18149338 = r18149335 - r18149337;
double r18149339 = -7.495229651452796e+234;
bool r18149340 = r18149338 <= r18149339;
double r18149341 = 2.0;
double r18149342 = x;
double r18149343 = r18149342 / r18149334;
double r18149344 = r18149341 * r18149343;
double r18149345 = r18149333 - r18149336;
double r18149346 = r18149344 / r18149345;
double r18149347 = -3.656744704766576e-231;
bool r18149348 = r18149338 <= r18149347;
double r18149349 = r18149342 * r18149341;
double r18149350 = r18149349 / r18149338;
double r18149351 = 2.5855176954021e-311;
bool r18149352 = r18149338 <= r18149351;
double r18149353 = 3.36468310649941e+210;
bool r18149354 = r18149338 <= r18149353;
double r18149355 = r18149354 ? r18149350 : r18149346;
double r18149356 = r18149352 ? r18149346 : r18149355;
double r18149357 = r18149348 ? r18149350 : r18149356;
double r18149358 = r18149340 ? r18149346 : r18149357;
return r18149358;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.7 |
|---|---|
| Target | 2.1 |
| Herbie | 0.3 |
if (- (* y z) (* t z)) < -7.495229651452796e+234 or -3.656744704766576e-231 < (- (* y z) (* t z)) < 2.5855176954021e-311 or 3.36468310649941e+210 < (- (* y z) (* t z)) Initial program 17.4
Simplified0.5
Taylor expanded around 0 0.4
if -7.495229651452796e+234 < (- (* y z) (* t z)) < -3.656744704766576e-231 or 2.5855176954021e-311 < (- (* y z) (* t z)) < 3.36468310649941e+210Initial program 0.2
Final simplification0.3
herbie shell --seed 2019162 +o rules:numerics
(FPCore (x y z t)
:name "Linear.Projection:infinitePerspective from linear-1.19.1.3, A"
:herbie-target
(if (< (/ (* x 2.0) (- (* y z) (* t z))) -2.559141628295061e-13) (* (/ x (* (- y t) z)) 2.0) (if (< (/ (* x 2.0) (- (* y z) (* t z))) 1.045027827330126e-269) (/ (* (/ x z) 2.0) (- y t)) (* (/ x (* (- y t) z)) 2.0)))
(/ (* x 2.0) (- (* y z) (* t z))))