\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.9189385332046700050057097541866824030876\right) + \frac{\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321\right) \cdot z + 0.08333333333333299564049667651488562114537}{x}\begin{array}{l}
\mathbf{if}\;x \le 20160595213046037610496:\\
\;\;\;\;\frac{0.08333333333333299564049667651488562114537 + \left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321\right) \cdot z}{x} + \left(0.9189385332046700050057097541866824030876 + \left(\left(\left(\sqrt{x} - \sqrt{0.5}\right) \cdot \log x\right) \cdot \left(\sqrt{x} + \sqrt{0.5}\right) - x\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{z}{\frac{x}{z}} \cdot \left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) - \frac{0.002777777777777800001512975569539776188321}{\frac{x}{z}}\right) + \left(0.9189385332046700050057097541866824030876 + \left(\log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \left(x - 0.5\right) + \left(\left(x - 0.5\right) \cdot \log \left({x}^{\frac{1}{3}}\right) - x\right)\right)\right)\\
\end{array}double f(double x, double y, double z) {
double r21379557 = x;
double r21379558 = 0.5;
double r21379559 = r21379557 - r21379558;
double r21379560 = log(r21379557);
double r21379561 = r21379559 * r21379560;
double r21379562 = r21379561 - r21379557;
double r21379563 = 0.91893853320467;
double r21379564 = r21379562 + r21379563;
double r21379565 = y;
double r21379566 = 0.0007936500793651;
double r21379567 = r21379565 + r21379566;
double r21379568 = z;
double r21379569 = r21379567 * r21379568;
double r21379570 = 0.0027777777777778;
double r21379571 = r21379569 - r21379570;
double r21379572 = r21379571 * r21379568;
double r21379573 = 0.083333333333333;
double r21379574 = r21379572 + r21379573;
double r21379575 = r21379574 / r21379557;
double r21379576 = r21379564 + r21379575;
return r21379576;
}
double f(double x, double y, double z) {
double r21379577 = x;
double r21379578 = 2.0160595213046038e+22;
bool r21379579 = r21379577 <= r21379578;
double r21379580 = 0.083333333333333;
double r21379581 = y;
double r21379582 = 0.0007936500793651;
double r21379583 = r21379581 + r21379582;
double r21379584 = z;
double r21379585 = r21379583 * r21379584;
double r21379586 = 0.0027777777777778;
double r21379587 = r21379585 - r21379586;
double r21379588 = r21379587 * r21379584;
double r21379589 = r21379580 + r21379588;
double r21379590 = r21379589 / r21379577;
double r21379591 = 0.91893853320467;
double r21379592 = sqrt(r21379577);
double r21379593 = 0.5;
double r21379594 = sqrt(r21379593);
double r21379595 = r21379592 - r21379594;
double r21379596 = log(r21379577);
double r21379597 = r21379595 * r21379596;
double r21379598 = r21379592 + r21379594;
double r21379599 = r21379597 * r21379598;
double r21379600 = r21379599 - r21379577;
double r21379601 = r21379591 + r21379600;
double r21379602 = r21379590 + r21379601;
double r21379603 = r21379577 / r21379584;
double r21379604 = r21379584 / r21379603;
double r21379605 = r21379604 * r21379583;
double r21379606 = r21379586 / r21379603;
double r21379607 = r21379605 - r21379606;
double r21379608 = cbrt(r21379577);
double r21379609 = r21379608 * r21379608;
double r21379610 = log(r21379609);
double r21379611 = r21379577 - r21379593;
double r21379612 = r21379610 * r21379611;
double r21379613 = 0.3333333333333333;
double r21379614 = pow(r21379577, r21379613);
double r21379615 = log(r21379614);
double r21379616 = r21379611 * r21379615;
double r21379617 = r21379616 - r21379577;
double r21379618 = r21379612 + r21379617;
double r21379619 = r21379591 + r21379618;
double r21379620 = r21379607 + r21379619;
double r21379621 = r21379579 ? r21379602 : r21379620;
return r21379621;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.0 |
|---|---|
| Target | 1.2 |
| Herbie | 0.3 |
if x < 2.0160595213046038e+22Initial program 0.2
rmApplied add-sqr-sqrt0.2
Applied add-sqr-sqrt0.2
Applied difference-of-squares0.2
Applied associate-*l*0.2
if 2.0160595213046038e+22 < x Initial program 10.8
rmApplied add-cube-cbrt10.8
Applied log-prod10.9
Applied distribute-lft-in10.9
Applied associate--l+10.9
rmApplied pow1/310.8
Taylor expanded around inf 10.9
Simplified0.4
Final simplification0.3
herbie shell --seed 2019168
(FPCore (x y z)
:name "Numeric.SpecFunctions:$slogFactorial from math-functions-0.1.5.2, B"
: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)))