1 - \log \left(1 - \frac{x - y}{1 - y}\right)\begin{array}{l}
\mathbf{if}\;y \le -78185572.3768116533756256103515625 \lor \neg \left(y \le 0.9979648952928983351995384509791620075703\right):\\
\;\;\;\;1 - \log \left(\left(\frac{x}{y} + 1 \cdot \frac{x}{{y}^{2}}\right) - 1 \cdot \frac{1}{y}\right)\\
\mathbf{else}:\\
\;\;\;\;1 - \left(\log \left(\sqrt{\mathsf{fma}\left(1, 1, -\frac{\sqrt[3]{1 \cdot 1 + \left(y \cdot y + 1 \cdot y\right)} \cdot \sqrt[3]{1 \cdot 1 + \left(y \cdot y + 1 \cdot y\right)}}{\sqrt{\sqrt[3]{1 - y}}} \cdot \frac{\frac{x - y}{\sqrt[3]{{1}^{3} - {y}^{3}} \cdot \sqrt[3]{{1}^{3} - {y}^{3}}}}{\sqrt{\sqrt[3]{1 - y}}}\right) + \mathsf{fma}\left(-\frac{\sqrt[3]{1 \cdot 1 + \left(y \cdot y + 1 \cdot y\right)} \cdot \sqrt[3]{1 \cdot 1 + \left(y \cdot y + 1 \cdot y\right)}}{\sqrt{\sqrt[3]{1 - y}}}, \frac{\frac{x - y}{\sqrt[3]{{1}^{3} - {y}^{3}} \cdot \sqrt[3]{{1}^{3} - {y}^{3}}}}{\sqrt{\sqrt[3]{1 - y}}}, \frac{\sqrt[3]{1 \cdot 1 + \left(y \cdot y + 1 \cdot y\right)} \cdot \sqrt[3]{1 \cdot 1 + \left(y \cdot y + 1 \cdot y\right)}}{\sqrt{\sqrt[3]{1 - y}}} \cdot \frac{\frac{x - y}{\sqrt[3]{{1}^{3} - {y}^{3}} \cdot \sqrt[3]{{1}^{3} - {y}^{3}}}}{\sqrt{\sqrt[3]{1 - y}}}\right)}\right) + \log \left(\sqrt{1 - \frac{\frac{x - y}{\sqrt[3]{1 - y} \cdot \sqrt[3]{1 - y}}}{\sqrt[3]{1 - y}}}\right)\right)\\
\end{array}double f(double x, double y) {
double r359231 = 1.0;
double r359232 = x;
double r359233 = y;
double r359234 = r359232 - r359233;
double r359235 = r359231 - r359233;
double r359236 = r359234 / r359235;
double r359237 = r359231 - r359236;
double r359238 = log(r359237);
double r359239 = r359231 - r359238;
return r359239;
}
double f(double x, double y) {
double r359240 = y;
double r359241 = -78185572.37681165;
bool r359242 = r359240 <= r359241;
double r359243 = 0.9979648952928983;
bool r359244 = r359240 <= r359243;
double r359245 = !r359244;
bool r359246 = r359242 || r359245;
double r359247 = 1.0;
double r359248 = x;
double r359249 = r359248 / r359240;
double r359250 = 2.0;
double r359251 = pow(r359240, r359250);
double r359252 = r359248 / r359251;
double r359253 = r359247 * r359252;
double r359254 = r359249 + r359253;
double r359255 = 1.0;
double r359256 = r359255 / r359240;
double r359257 = r359247 * r359256;
double r359258 = r359254 - r359257;
double r359259 = log(r359258);
double r359260 = r359247 - r359259;
double r359261 = r359247 * r359247;
double r359262 = r359240 * r359240;
double r359263 = r359247 * r359240;
double r359264 = r359262 + r359263;
double r359265 = r359261 + r359264;
double r359266 = cbrt(r359265);
double r359267 = r359266 * r359266;
double r359268 = r359247 - r359240;
double r359269 = cbrt(r359268);
double r359270 = sqrt(r359269);
double r359271 = r359267 / r359270;
double r359272 = r359248 - r359240;
double r359273 = 3.0;
double r359274 = pow(r359247, r359273);
double r359275 = pow(r359240, r359273);
double r359276 = r359274 - r359275;
double r359277 = cbrt(r359276);
double r359278 = r359277 * r359277;
double r359279 = r359272 / r359278;
double r359280 = r359279 / r359270;
double r359281 = r359271 * r359280;
double r359282 = -r359281;
double r359283 = fma(r359255, r359247, r359282);
double r359284 = -r359271;
double r359285 = fma(r359284, r359280, r359281);
double r359286 = r359283 + r359285;
double r359287 = sqrt(r359286);
double r359288 = log(r359287);
double r359289 = r359269 * r359269;
double r359290 = r359272 / r359289;
double r359291 = r359290 / r359269;
double r359292 = r359247 - r359291;
double r359293 = sqrt(r359292);
double r359294 = log(r359293);
double r359295 = r359288 + r359294;
double r359296 = r359247 - r359295;
double r359297 = r359246 ? r359260 : r359296;
return r359297;
}




Bits error versus x




Bits error versus y
| Original | 18.1 |
|---|---|
| Target | 0.1 |
| Herbie | 0.2 |
if y < -78185572.37681165 or 0.9979648952928983 < y Initial program 46.2
rmApplied add-cube-cbrt42.5
Applied associate-/r*42.5
Taylor expanded around inf 0.2
if -78185572.37681165 < y < 0.9979648952928983Initial program 0.1
rmApplied add-cube-cbrt0.1
Applied associate-/r*0.1
rmApplied add-sqr-sqrt0.2
Applied log-prod0.1
rmApplied add-sqr-sqrt0.1
Applied flip3--0.1
Applied cbrt-div0.1
Applied flip3--0.1
Applied cbrt-div0.1
Applied frac-times0.1
Applied associate-/r/0.1
Applied times-frac0.1
Applied add-sqr-sqrt0.1
Applied prod-diff0.1
Simplified0.1
Final simplification0.2
herbie shell --seed 2020002 +o rules:numerics
(FPCore (x y)
:name "Numeric.SpecFunctions:invIncompleteGamma from math-functions-0.1.5.2, B"
:precision binary64
:herbie-target
(if (< y -81284752.61947241) (- 1 (log (- (/ x (* y y)) (- (/ 1 y) (/ x y))))) (if (< y 3.0094271212461764e+25) (log (/ (exp 1) (- 1 (/ (- x y) (- 1 y))))) (- 1 (log (- (/ x (* y y)) (- (/ 1 y) (/ x y)))))))
(- 1 (log (- 1 (/ (- x y) (- 1 y))))))