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 -184499698888615392 \lor \neg \left(z \le 182633786.16382062435150146484375\right):\\
\;\;\;\;x + \left(0.07512208616047560960637952121032867580652 \cdot \frac{y}{z} + 0.06929105992918889456166908757950295694172 \cdot y\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 r624164 = x;
double r624165 = y;
double r624166 = z;
double r624167 = 0.0692910599291889;
double r624168 = r624166 * r624167;
double r624169 = 0.4917317610505968;
double r624170 = r624168 + r624169;
double r624171 = r624170 * r624166;
double r624172 = 0.279195317918525;
double r624173 = r624171 + r624172;
double r624174 = r624165 * r624173;
double r624175 = 6.012459259764103;
double r624176 = r624166 + r624175;
double r624177 = r624176 * r624166;
double r624178 = 3.350343815022304;
double r624179 = r624177 + r624178;
double r624180 = r624174 / r624179;
double r624181 = r624164 + r624180;
return r624181;
}
double f(double x, double y, double z) {
double r624182 = z;
double r624183 = -1.844996988886154e+17;
bool r624184 = r624182 <= r624183;
double r624185 = 182633786.16382062;
bool r624186 = r624182 <= r624185;
double r624187 = !r624186;
bool r624188 = r624184 || r624187;
double r624189 = x;
double r624190 = 0.07512208616047561;
double r624191 = y;
double r624192 = r624191 / r624182;
double r624193 = r624190 * r624192;
double r624194 = 0.0692910599291889;
double r624195 = r624194 * r624191;
double r624196 = r624193 + r624195;
double r624197 = r624189 + r624196;
double r624198 = 6.012459259764103;
double r624199 = r624182 + r624198;
double r624200 = r624199 * r624182;
double r624201 = 3.350343815022304;
double r624202 = r624200 + r624201;
double r624203 = sqrt(r624202);
double r624204 = r624191 / r624203;
double r624205 = r624182 * r624194;
double r624206 = 0.4917317610505968;
double r624207 = r624205 + r624206;
double r624208 = r624207 * r624182;
double r624209 = 0.279195317918525;
double r624210 = r624208 + r624209;
double r624211 = r624210 / r624203;
double r624212 = r624204 * r624211;
double r624213 = r624189 + r624212;
double r624214 = r624188 ? r624197 : r624213;
return r624214;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 20.0 |
|---|---|
| Target | 0.2 |
| Herbie | 0.1 |
if z < -1.844996988886154e+17 or 182633786.16382062 < z Initial program 41.8
Taylor expanded around inf 0.0
if -1.844996988886154e+17 < z < 182633786.16382062Initial program 0.2
rmApplied add-sqr-sqrt0.5
Applied times-frac0.2
Final simplification0.1
herbie shell --seed 2019353
(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))))