\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}\;x \le 2.2487158633549593 \cdot 10^{30}:\\
\;\;\;\;\left(\left(\left(\left(\log \left(\sqrt[3]{\sqrt{x}}\right) + \frac{2}{3} \cdot \log x\right) \cdot \left(x - 0.5\right) + \left(x - 0.5\right) \cdot \log \left(\sqrt[3]{\sqrt{x}}\right)\right) - 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}\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(x - 0.5\right) \cdot \log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) + \left(\left(x - 0.5\right) \cdot \log \left(\sqrt[3]{x}\right) - x\right)\right) + 0.91893853320467001\right) + \left(\frac{{z}^{2}}{x} \cdot \left(y + 7.93650079365100015 \cdot 10^{-4}\right) - 0.0027777777777778 \cdot \frac{z}{x}\right)\\
\end{array}double f(double x, double y, double z) {
double r538420 = x;
double r538421 = 0.5;
double r538422 = r538420 - r538421;
double r538423 = log(r538420);
double r538424 = r538422 * r538423;
double r538425 = r538424 - r538420;
double r538426 = 0.91893853320467;
double r538427 = r538425 + r538426;
double r538428 = y;
double r538429 = 0.0007936500793651;
double r538430 = r538428 + r538429;
double r538431 = z;
double r538432 = r538430 * r538431;
double r538433 = 0.0027777777777778;
double r538434 = r538432 - r538433;
double r538435 = r538434 * r538431;
double r538436 = 0.083333333333333;
double r538437 = r538435 + r538436;
double r538438 = r538437 / r538420;
double r538439 = r538427 + r538438;
return r538439;
}
double f(double x, double y, double z) {
double r538440 = x;
double r538441 = 2.2487158633549593e+30;
bool r538442 = r538440 <= r538441;
double r538443 = sqrt(r538440);
double r538444 = cbrt(r538443);
double r538445 = log(r538444);
double r538446 = 0.6666666666666666;
double r538447 = log(r538440);
double r538448 = r538446 * r538447;
double r538449 = r538445 + r538448;
double r538450 = 0.5;
double r538451 = r538440 - r538450;
double r538452 = r538449 * r538451;
double r538453 = r538451 * r538445;
double r538454 = r538452 + r538453;
double r538455 = r538454 - r538440;
double r538456 = 0.91893853320467;
double r538457 = r538455 + r538456;
double r538458 = y;
double r538459 = 0.0007936500793651;
double r538460 = r538458 + r538459;
double r538461 = z;
double r538462 = r538460 * r538461;
double r538463 = 0.0027777777777778;
double r538464 = r538462 - r538463;
double r538465 = r538464 * r538461;
double r538466 = 0.083333333333333;
double r538467 = r538465 + r538466;
double r538468 = r538467 / r538440;
double r538469 = r538457 + r538468;
double r538470 = cbrt(r538440);
double r538471 = r538470 * r538470;
double r538472 = log(r538471);
double r538473 = r538451 * r538472;
double r538474 = log(r538470);
double r538475 = r538451 * r538474;
double r538476 = r538475 - r538440;
double r538477 = r538473 + r538476;
double r538478 = r538477 + r538456;
double r538479 = 2.0;
double r538480 = pow(r538461, r538479);
double r538481 = r538480 / r538440;
double r538482 = r538481 * r538460;
double r538483 = r538461 / r538440;
double r538484 = r538463 * r538483;
double r538485 = r538482 - r538484;
double r538486 = r538478 + r538485;
double r538487 = r538442 ? r538469 : r538486;
return r538487;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 5.9 |
|---|---|
| Target | 1.2 |
| Herbie | 4.1 |
if x < 2.2487158633549593e+30Initial program 0.2
rmApplied add-cube-cbrt0.2
Applied log-prod0.2
Applied distribute-lft-in0.2
Simplified0.2
rmApplied add-sqr-sqrt0.2
Applied cbrt-prod0.2
Applied log-prod0.2
Applied distribute-lft-in0.2
Applied associate-+r+0.2
Simplified0.2
if 2.2487158633549593e+30 < x Initial program 10.7
rmApplied add-cube-cbrt10.7
Applied log-prod10.8
Applied distribute-lft-in10.8
Applied associate--l+10.7
Taylor expanded around inf 10.8
Simplified7.3
Final simplification4.1
herbie shell --seed 2020043
(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)))