\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}\frac{0.08333333333333299564049667651488562114537 + z \cdot \left(z \cdot \left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) - 0.002777777777777800001512975569539776188321\right)}{x} + \left(\left(\left(\left(x - 0.5\right) \cdot \log \left(\sqrt[3]{x}\right) + \log \left(\sqrt[3]{x} \cdot {x}^{\frac{1}{3}}\right) \cdot \left(x - 0.5\right)\right) - x\right) + 0.9189385332046700050057097541866824030876\right)double f(double x, double y, double z) {
double r19296843 = x;
double r19296844 = 0.5;
double r19296845 = r19296843 - r19296844;
double r19296846 = log(r19296843);
double r19296847 = r19296845 * r19296846;
double r19296848 = r19296847 - r19296843;
double r19296849 = 0.91893853320467;
double r19296850 = r19296848 + r19296849;
double r19296851 = y;
double r19296852 = 0.0007936500793651;
double r19296853 = r19296851 + r19296852;
double r19296854 = z;
double r19296855 = r19296853 * r19296854;
double r19296856 = 0.0027777777777778;
double r19296857 = r19296855 - r19296856;
double r19296858 = r19296857 * r19296854;
double r19296859 = 0.083333333333333;
double r19296860 = r19296858 + r19296859;
double r19296861 = r19296860 / r19296843;
double r19296862 = r19296850 + r19296861;
return r19296862;
}
double f(double x, double y, double z) {
double r19296863 = 0.083333333333333;
double r19296864 = z;
double r19296865 = y;
double r19296866 = 0.0007936500793651;
double r19296867 = r19296865 + r19296866;
double r19296868 = r19296864 * r19296867;
double r19296869 = 0.0027777777777778;
double r19296870 = r19296868 - r19296869;
double r19296871 = r19296864 * r19296870;
double r19296872 = r19296863 + r19296871;
double r19296873 = x;
double r19296874 = r19296872 / r19296873;
double r19296875 = 0.5;
double r19296876 = r19296873 - r19296875;
double r19296877 = cbrt(r19296873);
double r19296878 = log(r19296877);
double r19296879 = r19296876 * r19296878;
double r19296880 = 0.3333333333333333;
double r19296881 = pow(r19296873, r19296880);
double r19296882 = r19296877 * r19296881;
double r19296883 = log(r19296882);
double r19296884 = r19296883 * r19296876;
double r19296885 = r19296879 + r19296884;
double r19296886 = r19296885 - r19296873;
double r19296887 = 0.91893853320467;
double r19296888 = r19296886 + r19296887;
double r19296889 = r19296874 + r19296888;
return r19296889;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.0 |
|---|---|
| Target | 1.2 |
| Herbie | 6.0 |
Initial program 6.0
rmApplied add-cube-cbrt6.0
Applied log-prod6.0
Applied distribute-lft-in6.0
rmApplied pow1/36.0
Final simplification6.0
herbie shell --seed 2019192 +o rules:numerics
(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)))