\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.2891311917030867 \cdot 10^{63}:\\
\;\;\;\;\left(\frac{{\left(\log \left(\sqrt[3]{-x} \cdot \sqrt[3]{-1}\right) \cdot \left(3 \cdot x - 1.5\right)\right)}^{3} - {x}^{3}}{\left(\log \left(\sqrt[3]{-x} \cdot \sqrt[3]{-1}\right) \cdot \left(3 \cdot x - 1.5\right)\right) \cdot \left(\log \left(\sqrt[3]{-x} \cdot \sqrt[3]{-1}\right) \cdot \left(3 \cdot x - 1.5\right) + x\right) + x \cdot x} + 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 x - x\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 r584169 = x;
double r584170 = 0.5;
double r584171 = r584169 - r584170;
double r584172 = log(r584169);
double r584173 = r584171 * r584172;
double r584174 = r584173 - r584169;
double r584175 = 0.91893853320467;
double r584176 = r584174 + r584175;
double r584177 = y;
double r584178 = 0.0007936500793651;
double r584179 = r584177 + r584178;
double r584180 = z;
double r584181 = r584179 * r584180;
double r584182 = 0.0027777777777778;
double r584183 = r584181 - r584182;
double r584184 = r584183 * r584180;
double r584185 = 0.083333333333333;
double r584186 = r584184 + r584185;
double r584187 = r584186 / r584169;
double r584188 = r584176 + r584187;
return r584188;
}
double f(double x, double y, double z) {
double r584189 = x;
double r584190 = 2.2891311917030867e+63;
bool r584191 = r584189 <= r584190;
double r584192 = -r584189;
double r584193 = cbrt(r584192);
double r584194 = -1.0;
double r584195 = cbrt(r584194);
double r584196 = r584193 * r584195;
double r584197 = log(r584196);
double r584198 = 3.0;
double r584199 = r584198 * r584189;
double r584200 = 1.5;
double r584201 = r584199 - r584200;
double r584202 = r584197 * r584201;
double r584203 = pow(r584202, r584198);
double r584204 = pow(r584189, r584198);
double r584205 = r584203 - r584204;
double r584206 = r584202 + r584189;
double r584207 = r584202 * r584206;
double r584208 = r584189 * r584189;
double r584209 = r584207 + r584208;
double r584210 = r584205 / r584209;
double r584211 = 0.91893853320467;
double r584212 = r584210 + r584211;
double r584213 = y;
double r584214 = 0.0007936500793651;
double r584215 = r584213 + r584214;
double r584216 = z;
double r584217 = r584215 * r584216;
double r584218 = 0.0027777777777778;
double r584219 = r584217 - r584218;
double r584220 = r584219 * r584216;
double r584221 = 0.083333333333333;
double r584222 = r584220 + r584221;
double r584223 = r584222 / r584189;
double r584224 = r584212 + r584223;
double r584225 = 0.5;
double r584226 = r584189 - r584225;
double r584227 = log(r584189);
double r584228 = r584226 * r584227;
double r584229 = r584228 - r584189;
double r584230 = r584229 + r584211;
double r584231 = 2.0;
double r584232 = pow(r584216, r584231);
double r584233 = r584232 / r584189;
double r584234 = r584233 * r584215;
double r584235 = r584216 / r584189;
double r584236 = r584218 * r584235;
double r584237 = r584234 - r584236;
double r584238 = r584230 + r584237;
double r584239 = r584191 ? r584224 : r584238;
return r584239;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 5.8 |
|---|---|
| Target | 1.2 |
| Herbie | 4.1 |
if x < 2.2891311917030867e+63Initial program 0.8
rmApplied add-cube-cbrt0.8
Applied log-prod0.8
Applied distribute-lft-in0.8
Simplified0.8
Taylor expanded around -inf 64.0
Simplified0.8
rmApplied flip3--0.8
Simplified0.8
if 2.2891311917030867e+63 < x Initial program 11.2
Taylor expanded around inf 11.3
Simplified7.6
Final simplification4.1
herbie shell --seed 2020042
(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)))