\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}\left(\left(x - 0.5\right) \cdot \log \left(\sqrt{\sqrt{x}}\right) + \left(\log \left(\sqrt{\sqrt{x}}\right) \cdot \left(x - 0.5\right) + \left(\left(\log \left(\sqrt{x}\right) \cdot \left(x - 0.5\right) - x\right) + 0.91893853320467001\right)\right)\right) + \frac{\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956}{x}double f(double x, double y, double z) {
double r568109 = x;
double r568110 = 0.5;
double r568111 = r568109 - r568110;
double r568112 = log(r568109);
double r568113 = r568111 * r568112;
double r568114 = r568113 - r568109;
double r568115 = 0.91893853320467;
double r568116 = r568114 + r568115;
double r568117 = y;
double r568118 = 0.0007936500793651;
double r568119 = r568117 + r568118;
double r568120 = z;
double r568121 = r568119 * r568120;
double r568122 = 0.0027777777777778;
double r568123 = r568121 - r568122;
double r568124 = r568123 * r568120;
double r568125 = 0.083333333333333;
double r568126 = r568124 + r568125;
double r568127 = r568126 / r568109;
double r568128 = r568116 + r568127;
return r568128;
}
double f(double x, double y, double z) {
double r568129 = x;
double r568130 = 0.5;
double r568131 = r568129 - r568130;
double r568132 = sqrt(r568129);
double r568133 = sqrt(r568132);
double r568134 = log(r568133);
double r568135 = r568131 * r568134;
double r568136 = r568134 * r568131;
double r568137 = log(r568132);
double r568138 = r568137 * r568131;
double r568139 = r568138 - r568129;
double r568140 = 0.91893853320467;
double r568141 = r568139 + r568140;
double r568142 = r568136 + r568141;
double r568143 = r568135 + r568142;
double r568144 = y;
double r568145 = 0.0007936500793651;
double r568146 = r568144 + r568145;
double r568147 = z;
double r568148 = r568146 * r568147;
double r568149 = 0.0027777777777778;
double r568150 = r568148 - r568149;
double r568151 = r568150 * r568147;
double r568152 = 0.083333333333333;
double r568153 = r568151 + r568152;
double r568154 = r568153 / r568129;
double r568155 = r568143 + r568154;
return r568155;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 5.9 |
|---|---|
| Target | 1.2 |
| Herbie | 6.0 |
Initial program 5.9
rmApplied add-sqr-sqrt5.9
Applied log-prod5.9
Applied distribute-lft-in5.9
Applied associate--l+5.9
Applied associate-+l+5.9
Simplified5.9
rmApplied add-sqr-sqrt5.9
Applied sqrt-prod5.9
Applied log-prod5.9
Applied distribute-lft-in5.9
Applied associate-+l+6.0
Simplified6.0
Final simplification6.0
herbie shell --seed 2020027
(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)))