\frac{x \cdot 2.0}{y \cdot z - t \cdot z}\begin{array}{l}
\mathbf{if}\;x \le -8.31181793433353 \cdot 10^{-58}:\\
\;\;\;\;\frac{x}{y - t} \cdot \frac{2.0}{z}\\
\mathbf{elif}\;x \le 2.042269423331799 \cdot 10^{-231}:\\
\;\;\;\;\frac{2.0 \cdot x}{z \cdot \left(y - t\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{2.0}{z}}{\frac{y - t}{x}}\\
\end{array}double f(double x, double y, double z, double t) {
double r9995259 = x;
double r9995260 = 2.0;
double r9995261 = r9995259 * r9995260;
double r9995262 = y;
double r9995263 = z;
double r9995264 = r9995262 * r9995263;
double r9995265 = t;
double r9995266 = r9995265 * r9995263;
double r9995267 = r9995264 - r9995266;
double r9995268 = r9995261 / r9995267;
return r9995268;
}
double f(double x, double y, double z, double t) {
double r9995269 = x;
double r9995270 = -8.31181793433353e-58;
bool r9995271 = r9995269 <= r9995270;
double r9995272 = y;
double r9995273 = t;
double r9995274 = r9995272 - r9995273;
double r9995275 = r9995269 / r9995274;
double r9995276 = 2.0;
double r9995277 = z;
double r9995278 = r9995276 / r9995277;
double r9995279 = r9995275 * r9995278;
double r9995280 = 2.042269423331799e-231;
bool r9995281 = r9995269 <= r9995280;
double r9995282 = r9995276 * r9995269;
double r9995283 = r9995277 * r9995274;
double r9995284 = r9995282 / r9995283;
double r9995285 = r9995274 / r9995269;
double r9995286 = r9995278 / r9995285;
double r9995287 = r9995281 ? r9995284 : r9995286;
double r9995288 = r9995271 ? r9995279 : r9995287;
return r9995288;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.9 |
|---|---|
| Target | 2.2 |
| Herbie | 3.2 |
if x < -8.31181793433353e-58Initial program 9.7
Simplified8.4
rmApplied *-un-lft-identity8.4
Applied associate-/r/8.3
Applied times-frac2.7
Simplified2.7
if -8.31181793433353e-58 < x < 2.042269423331799e-231Initial program 3.3
Simplified2.9
Taylor expanded around 0 2.6
rmApplied associate-*r/2.6
Applied associate-/l/1.9
if 2.042269423331799e-231 < x Initial program 7.6
Simplified5.9
rmApplied associate-/r/5.8
Applied associate-/l*4.5
Final simplification3.2
herbie shell --seed 2019156 +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))))