x + \frac{y \cdot \left(\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736\right)}{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}\begin{array}{l}
\mathbf{if}\;z \le -123231064273774090083980455968768 \lor \neg \left(z \le 341189452.08085048198699951171875\right):\\
\;\;\;\;x + \left(0.06929105992918889456166908757950295694172 \cdot y + \frac{y}{z} \cdot \left(0.07512208616047560960637952121032867580652 - \frac{0.4046220386999212492717958866705885156989}{z}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y}{\sqrt{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}} \cdot \frac{\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736}{\sqrt{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}}\\
\end{array}double f(double x, double y, double z) {
double r442207 = x;
double r442208 = y;
double r442209 = z;
double r442210 = 0.0692910599291889;
double r442211 = r442209 * r442210;
double r442212 = 0.4917317610505968;
double r442213 = r442211 + r442212;
double r442214 = r442213 * r442209;
double r442215 = 0.279195317918525;
double r442216 = r442214 + r442215;
double r442217 = r442208 * r442216;
double r442218 = 6.012459259764103;
double r442219 = r442209 + r442218;
double r442220 = r442219 * r442209;
double r442221 = 3.350343815022304;
double r442222 = r442220 + r442221;
double r442223 = r442217 / r442222;
double r442224 = r442207 + r442223;
return r442224;
}
double f(double x, double y, double z) {
double r442225 = z;
double r442226 = -1.2323106427377409e+32;
bool r442227 = r442225 <= r442226;
double r442228 = 341189452.0808505;
bool r442229 = r442225 <= r442228;
double r442230 = !r442229;
bool r442231 = r442227 || r442230;
double r442232 = x;
double r442233 = 0.0692910599291889;
double r442234 = y;
double r442235 = r442233 * r442234;
double r442236 = r442234 / r442225;
double r442237 = 0.07512208616047561;
double r442238 = 0.40462203869992125;
double r442239 = r442238 / r442225;
double r442240 = r442237 - r442239;
double r442241 = r442236 * r442240;
double r442242 = r442235 + r442241;
double r442243 = r442232 + r442242;
double r442244 = 6.012459259764103;
double r442245 = r442225 + r442244;
double r442246 = r442245 * r442225;
double r442247 = 3.350343815022304;
double r442248 = r442246 + r442247;
double r442249 = sqrt(r442248);
double r442250 = r442234 / r442249;
double r442251 = r442225 * r442233;
double r442252 = 0.4917317610505968;
double r442253 = r442251 + r442252;
double r442254 = r442253 * r442225;
double r442255 = 0.279195317918525;
double r442256 = r442254 + r442255;
double r442257 = r442256 / r442249;
double r442258 = r442250 * r442257;
double r442259 = r442232 + r442258;
double r442260 = r442231 ? r442243 : r442259;
return r442260;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 19.5 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
if z < -1.2323106427377409e+32 or 341189452.0808505 < z Initial program 42.7
rmApplied *-un-lft-identity42.7
Applied times-frac34.3
Simplified34.3
Taylor expanded around inf 0.0
Simplified0.0
if -1.2323106427377409e+32 < z < 341189452.0808505Initial program 0.3
rmApplied add-sqr-sqrt0.7
Applied times-frac0.3
Final simplification0.2
herbie shell --seed 2019350
(FPCore (x y z)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, B"
:precision binary64
:herbie-target
(if (< z -8120153.652456675) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291889) y) (- (/ (* 0.40462203869992125 y) (* z z)) x)) (if (< z 657611897278737680000) (+ x (* (* y (+ (* (+ (* z 0.0692910599291889) 0.4917317610505968) z) 0.279195317918525)) (/ 1 (+ (* (+ z 6.012459259764103) z) 3.350343815022304)))) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291889) y) (- (/ (* 0.40462203869992125 y) (* z z)) x))))
(+ x (/ (* y (+ (* (+ (* z 0.0692910599291889) 0.4917317610505968) z) 0.279195317918525)) (+ (* (+ z 6.012459259764103) z) 3.350343815022304))))