\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 292599070894629356000:\\
\;\;\;\;\left(\left(\left(\left(x - 0.5\right) \cdot \left(2 \cdot \log \left(\sqrt[3]{x}\right)\right) + \left(x - 0.5\right) \cdot \log \left(\sqrt[3]{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}:\\
\;\;\;\;\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)\\
\end{array}double f(double x, double y, double z) {
double r439038 = x;
double r439039 = 0.5;
double r439040 = r439038 - r439039;
double r439041 = log(r439038);
double r439042 = r439040 * r439041;
double r439043 = r439042 - r439038;
double r439044 = 0.91893853320467;
double r439045 = r439043 + r439044;
double r439046 = y;
double r439047 = 0.0007936500793651;
double r439048 = r439046 + r439047;
double r439049 = z;
double r439050 = r439048 * r439049;
double r439051 = 0.0027777777777778;
double r439052 = r439050 - r439051;
double r439053 = r439052 * r439049;
double r439054 = 0.083333333333333;
double r439055 = r439053 + r439054;
double r439056 = r439055 / r439038;
double r439057 = r439045 + r439056;
return r439057;
}
double f(double x, double y, double z) {
double r439058 = x;
double r439059 = 2.9259907089462936e+20;
bool r439060 = r439058 <= r439059;
double r439061 = 0.5;
double r439062 = r439058 - r439061;
double r439063 = 2.0;
double r439064 = cbrt(r439058);
double r439065 = log(r439064);
double r439066 = r439063 * r439065;
double r439067 = r439062 * r439066;
double r439068 = r439062 * r439065;
double r439069 = r439067 + r439068;
double r439070 = r439069 - r439058;
double r439071 = 0.91893853320467;
double r439072 = r439070 + r439071;
double r439073 = y;
double r439074 = 0.0007936500793651;
double r439075 = r439073 + r439074;
double r439076 = z;
double r439077 = r439075 * r439076;
double r439078 = 0.0027777777777778;
double r439079 = r439077 - r439078;
double r439080 = r439079 * r439076;
double r439081 = 0.083333333333333;
double r439082 = r439080 + r439081;
double r439083 = r439082 / r439058;
double r439084 = r439072 + r439083;
double r439085 = pow(r439076, r439063);
double r439086 = r439085 / r439058;
double r439087 = r439074 * r439086;
double r439088 = 1.0;
double r439089 = r439088 / r439058;
double r439090 = log(r439089);
double r439091 = fma(r439090, r439058, r439058);
double r439092 = r439087 - r439091;
double r439093 = fma(r439086, r439073, r439092);
double r439094 = r439060 ? r439084 : r439093;
return r439094;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 6.2 |
|---|---|
| Target | 1.2 |
| Herbie | 4.2 |
if x < 2.9259907089462936e+20Initial program 0.2
rmApplied add-cube-cbrt0.2
Applied log-prod0.2
Applied distribute-lft-in0.2
Simplified0.2
if 2.9259907089462936e+20 < x Initial program 11.2
Simplified11.1
Taylor expanded around inf 11.3
Simplified7.6
Final simplification4.2
herbie shell --seed 2020036 +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)))