\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 1.1968875348652573 \cdot 10^{+130}:\\
\;\;\;\;\frac{z \cdot \left(z \cdot \left(y + 0.0007936500793651\right) - 0.0027777777777778\right) + 0.083333333333333}{x} + \sqrt{0.91893853320467 + \left(\left(\left(x - 0.5\right) \cdot \log \left(\sqrt[3]{x}\right) + \left(\left(x - 0.5\right) \cdot \log \left(\sqrt[3]{x}\right) + \left(x - 0.5\right) \cdot \log \left(\sqrt[3]{x}\right)\right)\right) - x\right)} \cdot \sqrt{\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.91893853320467}\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(\left(x - 0.5\right) \cdot \log \left(\sqrt[3]{x}\right) - x\right) + \log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \left(x - 0.5\right)\right) + 0.91893853320467\right) + \frac{1}{x \cdot \left(z \cdot 0.4000000000000064 - 0.10095227809524161 \cdot \left(z \cdot z\right)\right) + x \cdot 12.000000000000048}\\
\end{array}double f(double x, double y, double z) {
double r9071303 = x;
double r9071304 = 0.5;
double r9071305 = r9071303 - r9071304;
double r9071306 = log(r9071303);
double r9071307 = r9071305 * r9071306;
double r9071308 = r9071307 - r9071303;
double r9071309 = 0.91893853320467;
double r9071310 = r9071308 + r9071309;
double r9071311 = y;
double r9071312 = 0.0007936500793651;
double r9071313 = r9071311 + r9071312;
double r9071314 = z;
double r9071315 = r9071313 * r9071314;
double r9071316 = 0.0027777777777778;
double r9071317 = r9071315 - r9071316;
double r9071318 = r9071317 * r9071314;
double r9071319 = 0.083333333333333;
double r9071320 = r9071318 + r9071319;
double r9071321 = r9071320 / r9071303;
double r9071322 = r9071310 + r9071321;
return r9071322;
}
double f(double x, double y, double z) {
double r9071323 = x;
double r9071324 = 1.1968875348652573e+130;
bool r9071325 = r9071323 <= r9071324;
double r9071326 = z;
double r9071327 = y;
double r9071328 = 0.0007936500793651;
double r9071329 = r9071327 + r9071328;
double r9071330 = r9071326 * r9071329;
double r9071331 = 0.0027777777777778;
double r9071332 = r9071330 - r9071331;
double r9071333 = r9071326 * r9071332;
double r9071334 = 0.083333333333333;
double r9071335 = r9071333 + r9071334;
double r9071336 = r9071335 / r9071323;
double r9071337 = 0.91893853320467;
double r9071338 = 0.5;
double r9071339 = r9071323 - r9071338;
double r9071340 = cbrt(r9071323);
double r9071341 = log(r9071340);
double r9071342 = r9071339 * r9071341;
double r9071343 = r9071342 + r9071342;
double r9071344 = r9071342 + r9071343;
double r9071345 = r9071344 - r9071323;
double r9071346 = r9071337 + r9071345;
double r9071347 = sqrt(r9071346);
double r9071348 = log(r9071323);
double r9071349 = r9071339 * r9071348;
double r9071350 = r9071349 - r9071323;
double r9071351 = r9071350 + r9071337;
double r9071352 = sqrt(r9071351);
double r9071353 = r9071347 * r9071352;
double r9071354 = r9071336 + r9071353;
double r9071355 = r9071342 - r9071323;
double r9071356 = r9071340 * r9071340;
double r9071357 = log(r9071356);
double r9071358 = r9071357 * r9071339;
double r9071359 = r9071355 + r9071358;
double r9071360 = r9071359 + r9071337;
double r9071361 = 1.0;
double r9071362 = 0.4000000000000064;
double r9071363 = r9071326 * r9071362;
double r9071364 = 0.10095227809524161;
double r9071365 = r9071326 * r9071326;
double r9071366 = r9071364 * r9071365;
double r9071367 = r9071363 - r9071366;
double r9071368 = r9071323 * r9071367;
double r9071369 = 12.000000000000048;
double r9071370 = r9071323 * r9071369;
double r9071371 = r9071368 + r9071370;
double r9071372 = r9071361 / r9071371;
double r9071373 = r9071360 + r9071372;
double r9071374 = r9071325 ? r9071354 : r9071373;
return r9071374;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 5.3 |
|---|---|
| Target | 1.2 |
| Herbie | 3.3 |
if x < 1.1968875348652573e+130Initial program 1.7
rmApplied add-sqr-sqrt1.8
rmApplied add-cube-cbrt1.8
Applied log-prod1.8
Applied distribute-lft-in1.8
Simplified1.8
if 1.1968875348652573e+130 < x Initial program 12.2
rmApplied add-cube-cbrt12.2
Applied log-prod12.3
Applied distribute-lft-in12.3
Applied associate--l+12.2
rmApplied clear-num12.2
Taylor expanded around 0 11.1
Simplified6.1
Final simplification3.3
herbie shell --seed 2019156
(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)))