\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.91893853320467001\right) + \frac{\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956}{x}\begin{array}{l}
\mathbf{if}\;\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z \le -1.2913307966752496 \cdot 10^{73} \lor \neg \left(\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z \le 4.9413627594015583 \cdot 10^{85}\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{{z}^{2}}{x}, y, 7.93650079365100015 \cdot 10^{-4} \cdot \frac{{z}^{2}}{x} - \mathsf{fma}\left(\log \left(\frac{1}{x}\right), x, x\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(x - 0.5\right) \cdot \log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) + \mathsf{fma}\left(\log \left({\left(\frac{\sqrt[3]{1}}{{x}^{\frac{2}{3}}} \cdot \sqrt[3]{1}\right)}^{\frac{-1}{3}} \cdot {\left(\frac{\sqrt[3]{1}}{\sqrt[3]{x}}\right)}^{\frac{-1}{3}}\right), x - 0.5, 0.91893853320467001 - x\right)\right) + \frac{\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956}{x}\\
\end{array}double f(double x, double y, double z) {
double r555290 = x;
double r555291 = 0.5;
double r555292 = r555290 - r555291;
double r555293 = log(r555290);
double r555294 = r555292 * r555293;
double r555295 = r555294 - r555290;
double r555296 = 0.91893853320467;
double r555297 = r555295 + r555296;
double r555298 = y;
double r555299 = 0.0007936500793651;
double r555300 = r555298 + r555299;
double r555301 = z;
double r555302 = r555300 * r555301;
double r555303 = 0.0027777777777778;
double r555304 = r555302 - r555303;
double r555305 = r555304 * r555301;
double r555306 = 0.083333333333333;
double r555307 = r555305 + r555306;
double r555308 = r555307 / r555290;
double r555309 = r555297 + r555308;
return r555309;
}
double f(double x, double y, double z) {
double r555310 = y;
double r555311 = 0.0007936500793651;
double r555312 = r555310 + r555311;
double r555313 = z;
double r555314 = r555312 * r555313;
double r555315 = 0.0027777777777778;
double r555316 = r555314 - r555315;
double r555317 = r555316 * r555313;
double r555318 = -1.2913307966752496e+73;
bool r555319 = r555317 <= r555318;
double r555320 = 4.941362759401558e+85;
bool r555321 = r555317 <= r555320;
double r555322 = !r555321;
bool r555323 = r555319 || r555322;
double r555324 = 2.0;
double r555325 = pow(r555313, r555324);
double r555326 = x;
double r555327 = r555325 / r555326;
double r555328 = r555311 * r555327;
double r555329 = 1.0;
double r555330 = r555329 / r555326;
double r555331 = log(r555330);
double r555332 = fma(r555331, r555326, r555326);
double r555333 = r555328 - r555332;
double r555334 = fma(r555327, r555310, r555333);
double r555335 = 0.5;
double r555336 = r555326 - r555335;
double r555337 = cbrt(r555326);
double r555338 = r555337 * r555337;
double r555339 = log(r555338);
double r555340 = r555336 * r555339;
double r555341 = cbrt(r555329);
double r555342 = 0.6666666666666666;
double r555343 = pow(r555326, r555342);
double r555344 = r555341 / r555343;
double r555345 = r555344 * r555341;
double r555346 = -0.3333333333333333;
double r555347 = pow(r555345, r555346);
double r555348 = r555341 / r555337;
double r555349 = pow(r555348, r555346);
double r555350 = r555347 * r555349;
double r555351 = log(r555350);
double r555352 = 0.91893853320467;
double r555353 = r555352 - r555326;
double r555354 = fma(r555351, r555336, r555353);
double r555355 = r555340 + r555354;
double r555356 = 0.083333333333333;
double r555357 = r555317 + r555356;
double r555358 = r555357 / r555326;
double r555359 = r555355 + r555358;
double r555360 = r555323 ? r555334 : r555359;
return r555360;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 6.1 |
|---|---|
| Target | 1.1 |
| Herbie | 4.3 |
if (* (- (* (+ y 0.0007936500793651) z) 0.0027777777777778) z) < -1.2913307966752496e+73 or 4.941362759401558e+85 < (* (- (* (+ y 0.0007936500793651) z) 0.0027777777777778) z) Initial program 22.0
Simplified22.0
Taylor expanded around inf 22.5
Simplified15.3
if -1.2913307966752496e+73 < (* (- (* (+ y 0.0007936500793651) z) 0.0027777777777778) z) < 4.941362759401558e+85Initial program 0.2
rmApplied add-cube-cbrt0.2
Applied log-prod0.3
Applied distribute-lft-in0.3
Applied associate--l+0.2
Applied associate-+l+0.2
Simplified0.2
Taylor expanded around inf 0.2
rmApplied add-cube-cbrt0.2
Applied add-cube-cbrt0.2
Applied times-frac0.2
Applied unpow-prod-down0.2
Simplified0.2
Final simplification4.3
herbie shell --seed 2020083 +o rules:numerics
(FPCore (x y z)
:name "Numeric.SpecFunctions:$slogFactorial from math-functions-0.1.5.2, B"
:precision binary64
:herbie-target
(+ (+ (+ (* (- x 0.5) (log x)) (- 0.91893853320467 x)) (/ 0.083333333333333 x)) (* (/ z x) (- (* z (+ y 0.0007936500793651)) 0.0027777777777778)))
(+ (+ (- (* (- x 0.5) (log x)) x) 0.91893853320467) (/ (+ (* (- (* (+ y 0.0007936500793651) z) 0.0027777777777778) z) 0.083333333333333) x)))