\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}\;x \le 6.623427100152747142328519455947128489092 \cdot 10^{87}:\\
\;\;\;\;\left(\left(x - 0.5\right) \cdot \log \left({x}^{\frac{1}{3}} \cdot \sqrt[3]{x}\right) + \left(\left(\log \left({\left(\frac{1}{x}\right)}^{\frac{-1}{3}}\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}\\
\mathbf{else}:\\
\;\;\;\;\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)\\
\end{array}double f(double x, double y, double z) {
double r374342 = x;
double r374343 = 0.5;
double r374344 = r374342 - r374343;
double r374345 = log(r374342);
double r374346 = r374344 * r374345;
double r374347 = r374346 - r374342;
double r374348 = 0.91893853320467;
double r374349 = r374347 + r374348;
double r374350 = y;
double r374351 = 0.0007936500793651;
double r374352 = r374350 + r374351;
double r374353 = z;
double r374354 = r374352 * r374353;
double r374355 = 0.0027777777777778;
double r374356 = r374354 - r374355;
double r374357 = r374356 * r374353;
double r374358 = 0.083333333333333;
double r374359 = r374357 + r374358;
double r374360 = r374359 / r374342;
double r374361 = r374349 + r374360;
return r374361;
}
double f(double x, double y, double z) {
double r374362 = x;
double r374363 = 6.623427100152747e+87;
bool r374364 = r374362 <= r374363;
double r374365 = 0.5;
double r374366 = r374362 - r374365;
double r374367 = 0.3333333333333333;
double r374368 = pow(r374362, r374367);
double r374369 = cbrt(r374362);
double r374370 = r374368 * r374369;
double r374371 = log(r374370);
double r374372 = r374366 * r374371;
double r374373 = 1.0;
double r374374 = r374373 / r374362;
double r374375 = -0.3333333333333333;
double r374376 = pow(r374374, r374375);
double r374377 = log(r374376);
double r374378 = r374377 * r374366;
double r374379 = r374378 - r374362;
double r374380 = 0.91893853320467;
double r374381 = r374379 + r374380;
double r374382 = r374372 + r374381;
double r374383 = y;
double r374384 = 0.0007936500793651;
double r374385 = r374383 + r374384;
double r374386 = z;
double r374387 = r374385 * r374386;
double r374388 = 0.0027777777777778;
double r374389 = r374387 - r374388;
double r374390 = r374389 * r374386;
double r374391 = 0.083333333333333;
double r374392 = r374390 + r374391;
double r374393 = r374392 / r374362;
double r374394 = r374382 + r374393;
double r374395 = log(r374362);
double r374396 = r374366 * r374395;
double r374397 = r374396 - r374362;
double r374398 = r374397 + r374380;
double r374399 = 2.0;
double r374400 = pow(r374386, r374399);
double r374401 = r374400 / r374362;
double r374402 = r374401 * r374385;
double r374403 = r374386 / r374362;
double r374404 = r374388 * r374403;
double r374405 = r374402 - r374404;
double r374406 = r374398 + r374405;
double r374407 = r374364 ? r374394 : r374406;
return r374407;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 5.8 |
|---|---|
| Target | 1.4 |
| Herbie | 4.1 |
if x < 6.623427100152747e+87Initial program 1.0
rmApplied add-cube-cbrt1.0
Applied log-prod1.0
Applied distribute-lft-in1.0
Applied associate--l+1.0
Applied associate-+l+1.0
Simplified1.0
rmApplied pow1/31.0
Taylor expanded around inf 1.0
if 6.623427100152747e+87 < x Initial program 11.9
Taylor expanded around inf 11.9
Simplified8.0
Final simplification4.1
herbie shell --seed 2019303
(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)))