\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}\;z \le -5.66491740305808737168727291153012636277 \cdot 10^{-15} \lor \neg \left(z \le 15435257873712398\right):\\
\;\;\;\;\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.9189385332046700050057097541866824030876\right) + \left(\frac{{z}^{2}}{x} \cdot \left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) - 0.002777777777777800001512975569539776188321 \cdot \frac{z}{x}\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\log \left(\left(\sqrt[3]{{\left({x}^{\left(\sqrt[3]{\frac{2}{3}} \cdot \sqrt[3]{\frac{2}{3}}\right)}\right)}^{\left(\sqrt[3]{\frac{2}{3}}\right)}} \cdot \sqrt[3]{\sqrt[3]{x}}\right) \cdot \sqrt[3]{x}\right) \cdot \left(x - 0.5\right) + \left(\left(\log \left(\sqrt[3]{x}\right) \cdot \left(x - 0.5\right) - x\right) + 0.9189385332046700050057097541866824030876\right)\right) + \frac{\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321\right) \cdot z + 0.08333333333333299564049667651488562114537}{x}\\
\end{array}double f(double x, double y, double z) {
double r415332 = x;
double r415333 = 0.5;
double r415334 = r415332 - r415333;
double r415335 = log(r415332);
double r415336 = r415334 * r415335;
double r415337 = r415336 - r415332;
double r415338 = 0.91893853320467;
double r415339 = r415337 + r415338;
double r415340 = y;
double r415341 = 0.0007936500793651;
double r415342 = r415340 + r415341;
double r415343 = z;
double r415344 = r415342 * r415343;
double r415345 = 0.0027777777777778;
double r415346 = r415344 - r415345;
double r415347 = r415346 * r415343;
double r415348 = 0.083333333333333;
double r415349 = r415347 + r415348;
double r415350 = r415349 / r415332;
double r415351 = r415339 + r415350;
return r415351;
}
double f(double x, double y, double z) {
double r415352 = z;
double r415353 = -5.664917403058087e-15;
bool r415354 = r415352 <= r415353;
double r415355 = 15435257873712398.0;
bool r415356 = r415352 <= r415355;
double r415357 = !r415356;
bool r415358 = r415354 || r415357;
double r415359 = x;
double r415360 = 0.5;
double r415361 = r415359 - r415360;
double r415362 = log(r415359);
double r415363 = r415361 * r415362;
double r415364 = r415363 - r415359;
double r415365 = 0.91893853320467;
double r415366 = r415364 + r415365;
double r415367 = 2.0;
double r415368 = pow(r415352, r415367);
double r415369 = r415368 / r415359;
double r415370 = y;
double r415371 = 0.0007936500793651;
double r415372 = r415370 + r415371;
double r415373 = r415369 * r415372;
double r415374 = 0.0027777777777778;
double r415375 = r415352 / r415359;
double r415376 = r415374 * r415375;
double r415377 = r415373 - r415376;
double r415378 = r415366 + r415377;
double r415379 = 0.6666666666666666;
double r415380 = cbrt(r415379);
double r415381 = r415380 * r415380;
double r415382 = pow(r415359, r415381);
double r415383 = pow(r415382, r415380);
double r415384 = cbrt(r415383);
double r415385 = cbrt(r415359);
double r415386 = cbrt(r415385);
double r415387 = r415384 * r415386;
double r415388 = r415387 * r415385;
double r415389 = log(r415388);
double r415390 = r415389 * r415361;
double r415391 = log(r415385);
double r415392 = r415391 * r415361;
double r415393 = r415392 - r415359;
double r415394 = r415393 + r415365;
double r415395 = r415390 + r415394;
double r415396 = r415372 * r415352;
double r415397 = r415396 - r415374;
double r415398 = r415397 * r415352;
double r415399 = 0.083333333333333;
double r415400 = r415398 + r415399;
double r415401 = r415400 / r415359;
double r415402 = r415395 + r415401;
double r415403 = r415358 ? r415378 : r415402;
return r415403;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.2 |
|---|---|
| Target | 1.2 |
| Herbie | 4.8 |
if z < -5.664917403058087e-15 or 15435257873712398.0 < z Initial program 20.3
Taylor expanded around inf 21.9
Simplified15.5
if -5.664917403058087e-15 < z < 15435257873712398.0Initial program 0.2
rmApplied add-cube-cbrt0.2
Applied log-prod0.3
Applied distribute-rgt-in0.3
Applied associate--l+0.2
Applied associate-+l+0.2
rmApplied add-cube-cbrt0.2
Applied cbrt-prod0.2
Simplified0.2
rmApplied add-cube-cbrt0.3
Applied pow-unpow0.2
Final simplification4.8
herbie shell --seed 2019306
(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.91893853320467001 x)) (/ 0.0833333333333329956 x)) (* (/ z x) (- (* z (+ y 7.93650079365100015e-4)) 0.0027777777777778)))
(+ (+ (- (* (- x 0.5) (log x)) x) 0.91893853320467001) (/ (+ (* (- (* (+ y 7.93650079365100015e-4) z) 0.0027777777777778) z) 0.0833333333333329956) x)))