\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 r478124 = x;
double r478125 = 0.5;
double r478126 = r478124 - r478125;
double r478127 = log(r478124);
double r478128 = r478126 * r478127;
double r478129 = r478128 - r478124;
double r478130 = 0.91893853320467;
double r478131 = r478129 + r478130;
double r478132 = y;
double r478133 = 0.0007936500793651;
double r478134 = r478132 + r478133;
double r478135 = z;
double r478136 = r478134 * r478135;
double r478137 = 0.0027777777777778;
double r478138 = r478136 - r478137;
double r478139 = r478138 * r478135;
double r478140 = 0.083333333333333;
double r478141 = r478139 + r478140;
double r478142 = r478141 / r478124;
double r478143 = r478131 + r478142;
return r478143;
}
double f(double x, double y, double z) {
double r478144 = x;
double r478145 = 2.9259907089462936e+20;
bool r478146 = r478144 <= r478145;
double r478147 = 0.5;
double r478148 = r478144 - r478147;
double r478149 = 2.0;
double r478150 = cbrt(r478144);
double r478151 = log(r478150);
double r478152 = r478149 * r478151;
double r478153 = r478148 * r478152;
double r478154 = r478148 * r478151;
double r478155 = r478153 + r478154;
double r478156 = r478155 - r478144;
double r478157 = 0.91893853320467;
double r478158 = r478156 + r478157;
double r478159 = y;
double r478160 = 0.0007936500793651;
double r478161 = r478159 + r478160;
double r478162 = z;
double r478163 = r478161 * r478162;
double r478164 = 0.0027777777777778;
double r478165 = r478163 - r478164;
double r478166 = r478165 * r478162;
double r478167 = 0.083333333333333;
double r478168 = r478166 + r478167;
double r478169 = r478168 / r478144;
double r478170 = r478158 + r478169;
double r478171 = pow(r478162, r478149);
double r478172 = r478171 / r478144;
double r478173 = r478160 * r478172;
double r478174 = 1.0;
double r478175 = r478174 / r478144;
double r478176 = log(r478175);
double r478177 = fma(r478176, r478144, r478144);
double r478178 = r478173 - r478177;
double r478179 = fma(r478172, r478159, r478178);
double r478180 = r478146 ? r478170 : r478179;
return r478180;
}




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)))