\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.91893853320467\right) + \frac{\left(\left(y + 0.0007936500793651\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.083333333333333}{x}\begin{array}{l}
\mathbf{if}\;x \le 2849501.9306197646:\\
\;\;\;\;\frac{z \cdot \left(z \cdot \left(y + 0.0007936500793651\right) - 0.0027777777777778\right) + 0.083333333333333}{x} + \left(0.91893853320467 + \left(\sqrt[3]{\log x} \cdot \left(\left(\sqrt[3]{\log x} \cdot \sqrt[3]{\log x}\right) \cdot \left(x - 0.5\right)\right) - x\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{z}{\frac{x}{z}} \cdot \left(y + 0.0007936500793651\right) - \frac{z \cdot 0.0027777777777778}{x}\right) + \left(\log \left({\left({x}^{\left(\sqrt[3]{\frac{2}{3}} \cdot \sqrt[3]{\frac{2}{3}}\right)}\right)}^{\left(\sqrt[3]{\frac{2}{3}}\right)}\right) \cdot \left(x - 0.5\right) + \left(\left(\log \left(\sqrt[3]{x}\right) \cdot \left(x - 0.5\right) - x\right) + 0.91893853320467\right)\right)\\
\end{array}double f(double x, double y, double z) {
double r25501254 = x;
double r25501255 = 0.5;
double r25501256 = r25501254 - r25501255;
double r25501257 = log(r25501254);
double r25501258 = r25501256 * r25501257;
double r25501259 = r25501258 - r25501254;
double r25501260 = 0.91893853320467;
double r25501261 = r25501259 + r25501260;
double r25501262 = y;
double r25501263 = 0.0007936500793651;
double r25501264 = r25501262 + r25501263;
double r25501265 = z;
double r25501266 = r25501264 * r25501265;
double r25501267 = 0.0027777777777778;
double r25501268 = r25501266 - r25501267;
double r25501269 = r25501268 * r25501265;
double r25501270 = 0.083333333333333;
double r25501271 = r25501269 + r25501270;
double r25501272 = r25501271 / r25501254;
double r25501273 = r25501261 + r25501272;
return r25501273;
}
double f(double x, double y, double z) {
double r25501274 = x;
double r25501275 = 2849501.9306197646;
bool r25501276 = r25501274 <= r25501275;
double r25501277 = z;
double r25501278 = y;
double r25501279 = 0.0007936500793651;
double r25501280 = r25501278 + r25501279;
double r25501281 = r25501277 * r25501280;
double r25501282 = 0.0027777777777778;
double r25501283 = r25501281 - r25501282;
double r25501284 = r25501277 * r25501283;
double r25501285 = 0.083333333333333;
double r25501286 = r25501284 + r25501285;
double r25501287 = r25501286 / r25501274;
double r25501288 = 0.91893853320467;
double r25501289 = log(r25501274);
double r25501290 = cbrt(r25501289);
double r25501291 = r25501290 * r25501290;
double r25501292 = 0.5;
double r25501293 = r25501274 - r25501292;
double r25501294 = r25501291 * r25501293;
double r25501295 = r25501290 * r25501294;
double r25501296 = r25501295 - r25501274;
double r25501297 = r25501288 + r25501296;
double r25501298 = r25501287 + r25501297;
double r25501299 = r25501274 / r25501277;
double r25501300 = r25501277 / r25501299;
double r25501301 = r25501300 * r25501280;
double r25501302 = r25501277 * r25501282;
double r25501303 = r25501302 / r25501274;
double r25501304 = r25501301 - r25501303;
double r25501305 = 0.6666666666666666;
double r25501306 = cbrt(r25501305);
double r25501307 = r25501306 * r25501306;
double r25501308 = pow(r25501274, r25501307);
double r25501309 = pow(r25501308, r25501306);
double r25501310 = log(r25501309);
double r25501311 = r25501310 * r25501293;
double r25501312 = cbrt(r25501274);
double r25501313 = log(r25501312);
double r25501314 = r25501313 * r25501293;
double r25501315 = r25501314 - r25501274;
double r25501316 = r25501315 + r25501288;
double r25501317 = r25501311 + r25501316;
double r25501318 = r25501304 + r25501317;
double r25501319 = r25501276 ? r25501298 : r25501318;
return r25501319;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 5.7 |
|---|---|
| Target | 1.1 |
| Herbie | 0.6 |
if x < 2849501.9306197646Initial program 0.1
rmApplied add-cube-cbrt0.1
Applied associate-*r*0.1
if 2849501.9306197646 < x Initial program 9.7
rmApplied add-cube-cbrt9.7
Applied log-prod9.7
Applied distribute-rgt-in9.7
Applied associate--l+9.7
Applied associate-+l+9.7
rmApplied pow1/39.7
Applied pow1/39.7
Applied pow-prod-up9.7
Simplified9.7
rmApplied add-cube-cbrt10.2
Applied pow-unpow10.0
Taylor expanded around inf 10.1
Simplified0.9
Final simplification0.6
herbie shell --seed 2019164
(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)))