\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 2147002421983032.5:\\
\;\;\;\;\left(\left(\left(\sqrt{x} + \sqrt{0.5}\right) \cdot \left(\left(\sqrt{x} - \sqrt{0.5}\right) \cdot \log x\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}:\\
\;\;\;\;\left(\log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \left(x - 0.5\right) + \mathsf{fma}\left(\log \left(\sqrt[3]{x}\right), x - 0.5, 0.91893853320467001 - x\right)\right) + \mathsf{fma}\left(\frac{{z}^{2}}{x}, y + 7.93650079365100015 \cdot 10^{-4}, -0.0027777777777778 \cdot \frac{z}{x}\right)\\
\end{array}double f(double x, double y, double z) {
double r415308 = x;
double r415309 = 0.5;
double r415310 = r415308 - r415309;
double r415311 = log(r415308);
double r415312 = r415310 * r415311;
double r415313 = r415312 - r415308;
double r415314 = 0.91893853320467;
double r415315 = r415313 + r415314;
double r415316 = y;
double r415317 = 0.0007936500793651;
double r415318 = r415316 + r415317;
double r415319 = z;
double r415320 = r415318 * r415319;
double r415321 = 0.0027777777777778;
double r415322 = r415320 - r415321;
double r415323 = r415322 * r415319;
double r415324 = 0.083333333333333;
double r415325 = r415323 + r415324;
double r415326 = r415325 / r415308;
double r415327 = r415315 + r415326;
return r415327;
}
double f(double x, double y, double z) {
double r415328 = x;
double r415329 = 2147002421983032.5;
bool r415330 = r415328 <= r415329;
double r415331 = sqrt(r415328);
double r415332 = 0.5;
double r415333 = sqrt(r415332);
double r415334 = r415331 + r415333;
double r415335 = r415331 - r415333;
double r415336 = log(r415328);
double r415337 = r415335 * r415336;
double r415338 = r415334 * r415337;
double r415339 = r415338 - r415328;
double r415340 = 0.91893853320467;
double r415341 = r415339 + r415340;
double r415342 = y;
double r415343 = 0.0007936500793651;
double r415344 = r415342 + r415343;
double r415345 = z;
double r415346 = r415344 * r415345;
double r415347 = 0.0027777777777778;
double r415348 = r415346 - r415347;
double r415349 = r415348 * r415345;
double r415350 = 0.083333333333333;
double r415351 = r415349 + r415350;
double r415352 = r415351 / r415328;
double r415353 = r415341 + r415352;
double r415354 = cbrt(r415328);
double r415355 = r415354 * r415354;
double r415356 = log(r415355);
double r415357 = r415328 - r415332;
double r415358 = r415356 * r415357;
double r415359 = log(r415354);
double r415360 = r415340 - r415328;
double r415361 = fma(r415359, r415357, r415360);
double r415362 = r415358 + r415361;
double r415363 = 2.0;
double r415364 = pow(r415345, r415363);
double r415365 = r415364 / r415328;
double r415366 = r415345 / r415328;
double r415367 = r415347 * r415366;
double r415368 = -r415367;
double r415369 = fma(r415365, r415344, r415368);
double r415370 = r415362 + r415369;
double r415371 = r415330 ? r415353 : r415370;
return r415371;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 6.1 |
|---|---|
| Target | 1.3 |
| Herbie | 4.2 |
if x < 2147002421983032.5Initial program 0.2
rmApplied add-sqr-sqrt0.2
Applied add-sqr-sqrt0.2
Applied difference-of-squares0.2
Applied associate-*l*0.2
if 2147002421983032.5 < x Initial program 10.7
rmApplied add-cube-cbrt10.7
Applied log-prod10.8
Applied distribute-rgt-in10.8
Applied associate--l+10.8
Applied associate-+l+10.8
Simplified10.7
Taylor expanded around inf 10.8
Simplified7.3
Final simplification4.2
herbie shell --seed 2020081 +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)))