\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}\;\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z \le 8.37321655534011972 \cdot 10^{233}:\\
\;\;\;\;\left(\left(\left(x - 0.5\right) \cdot \log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) + \left(\log \left(\sqrt[3]{x}\right) \cdot \left(x - 0.5\right) - x\right)\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(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.91893853320467001\right) + \frac{1}{\left(0.400000000000006406 \cdot \left(x \cdot z\right) + 12.000000000000048 \cdot x\right) - 0.100952278095241613 \cdot \left(x \cdot {z}^{2}\right)}\\
\end{array}double f(double x, double y, double z) {
double r560843 = x;
double r560844 = 0.5;
double r560845 = r560843 - r560844;
double r560846 = log(r560843);
double r560847 = r560845 * r560846;
double r560848 = r560847 - r560843;
double r560849 = 0.91893853320467;
double r560850 = r560848 + r560849;
double r560851 = y;
double r560852 = 0.0007936500793651;
double r560853 = r560851 + r560852;
double r560854 = z;
double r560855 = r560853 * r560854;
double r560856 = 0.0027777777777778;
double r560857 = r560855 - r560856;
double r560858 = r560857 * r560854;
double r560859 = 0.083333333333333;
double r560860 = r560858 + r560859;
double r560861 = r560860 / r560843;
double r560862 = r560850 + r560861;
return r560862;
}
double f(double x, double y, double z) {
double r560863 = y;
double r560864 = 0.0007936500793651;
double r560865 = r560863 + r560864;
double r560866 = z;
double r560867 = r560865 * r560866;
double r560868 = 0.0027777777777778;
double r560869 = r560867 - r560868;
double r560870 = r560869 * r560866;
double r560871 = 8.37321655534012e+233;
bool r560872 = r560870 <= r560871;
double r560873 = x;
double r560874 = 0.5;
double r560875 = r560873 - r560874;
double r560876 = cbrt(r560873);
double r560877 = r560876 * r560876;
double r560878 = log(r560877);
double r560879 = r560875 * r560878;
double r560880 = log(r560876);
double r560881 = r560880 * r560875;
double r560882 = r560881 - r560873;
double r560883 = r560879 + r560882;
double r560884 = 0.91893853320467;
double r560885 = r560883 + r560884;
double r560886 = 0.083333333333333;
double r560887 = r560870 + r560886;
double r560888 = r560887 / r560873;
double r560889 = r560885 + r560888;
double r560890 = log(r560873);
double r560891 = r560875 * r560890;
double r560892 = r560891 - r560873;
double r560893 = r560892 + r560884;
double r560894 = 1.0;
double r560895 = 0.4000000000000064;
double r560896 = r560873 * r560866;
double r560897 = r560895 * r560896;
double r560898 = 12.000000000000048;
double r560899 = r560898 * r560873;
double r560900 = r560897 + r560899;
double r560901 = 0.10095227809524161;
double r560902 = 2.0;
double r560903 = pow(r560866, r560902);
double r560904 = r560873 * r560903;
double r560905 = r560901 * r560904;
double r560906 = r560900 - r560905;
double r560907 = r560894 / r560906;
double r560908 = r560893 + r560907;
double r560909 = r560872 ? r560889 : r560908;
return r560909;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 5.9 |
|---|---|
| Target | 1.2 |
| Herbie | 6.2 |
if (* (- (* (+ y 0.0007936500793651) z) 0.0027777777777778) z) < 8.37321655534012e+233Initial program 1.7
rmApplied add-cube-cbrt1.8
Applied log-prod1.8
Applied distribute-lft-in1.8
Applied associate--l+1.8
Simplified1.8
if 8.37321655534012e+233 < (* (- (* (+ y 0.0007936500793651) z) 0.0027777777777778) z) Initial program 40.2
rmApplied clear-num40.2
Taylor expanded around 0 43.6
Final simplification6.2
herbie shell --seed 2020100
(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)))