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 -1877563903899137105461248 \lor \neg \left(z \le 130680103.77611891925334930419921875\right):\\
\;\;\;\;x + \left(0.07512208616047560960637952121032867580652 \cdot \frac{y}{z} + 0.06929105992918889456166908757950295694172 \cdot y\right)\\
\mathbf{else}:\\
\;\;\;\;x + y \cdot \frac{\sqrt[3]{\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736} \cdot \sqrt[3]{\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736}}{\frac{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}{\sqrt[3]{\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736}}}\\
\end{array}double f(double x, double y, double z) {
double r388287 = x;
double r388288 = y;
double r388289 = z;
double r388290 = 0.0692910599291889;
double r388291 = r388289 * r388290;
double r388292 = 0.4917317610505968;
double r388293 = r388291 + r388292;
double r388294 = r388293 * r388289;
double r388295 = 0.279195317918525;
double r388296 = r388294 + r388295;
double r388297 = r388288 * r388296;
double r388298 = 6.012459259764103;
double r388299 = r388289 + r388298;
double r388300 = r388299 * r388289;
double r388301 = 3.350343815022304;
double r388302 = r388300 + r388301;
double r388303 = r388297 / r388302;
double r388304 = r388287 + r388303;
return r388304;
}
double f(double x, double y, double z) {
double r388305 = z;
double r388306 = -1.877563903899137e+24;
bool r388307 = r388305 <= r388306;
double r388308 = 130680103.77611892;
bool r388309 = r388305 <= r388308;
double r388310 = !r388309;
bool r388311 = r388307 || r388310;
double r388312 = x;
double r388313 = 0.07512208616047561;
double r388314 = y;
double r388315 = r388314 / r388305;
double r388316 = r388313 * r388315;
double r388317 = 0.0692910599291889;
double r388318 = r388317 * r388314;
double r388319 = r388316 + r388318;
double r388320 = r388312 + r388319;
double r388321 = r388305 * r388317;
double r388322 = 0.4917317610505968;
double r388323 = r388321 + r388322;
double r388324 = r388323 * r388305;
double r388325 = 0.279195317918525;
double r388326 = r388324 + r388325;
double r388327 = cbrt(r388326);
double r388328 = r388327 * r388327;
double r388329 = 6.012459259764103;
double r388330 = r388305 + r388329;
double r388331 = r388330 * r388305;
double r388332 = 3.350343815022304;
double r388333 = r388331 + r388332;
double r388334 = r388333 / r388327;
double r388335 = r388328 / r388334;
double r388336 = r388314 * r388335;
double r388337 = r388312 + r388336;
double r388338 = r388311 ? r388320 : r388337;
return r388338;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 19.6 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
if z < -1.877563903899137e+24 or 130680103.77611892 < z Initial program 41.1
Taylor expanded around inf 0.0
if -1.877563903899137e+24 < z < 130680103.77611892Initial program 0.3
rmApplied *-un-lft-identity0.3
Applied times-frac0.1
Simplified0.1
rmApplied add-cube-cbrt0.2
Applied associate-/l*0.2
Final simplification0.1
herbie shell --seed 2019356
(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))))