1 - \log \left(1 - \frac{x - y}{1 - y}\right)\begin{array}{l}
\mathbf{if}\;y \le -34474611802046.8828125:\\
\;\;\;\;1 - \log \left(\mathsf{fma}\left(\frac{1}{y}, \frac{x}{y}, \frac{x}{y} - \frac{1}{y}\right)\right)\\
\mathbf{elif}\;y \le 43744445.7007110416889190673828125:\\
\;\;\;\;1 - \log \left(\mathsf{fma}\left(-\left(1 + y\right), \frac{x - y}{1 \cdot 1 - y \cdot y}, \left(1 + y\right) \cdot \frac{x - y}{1 \cdot 1 - y \cdot y}\right) + \mathsf{fma}\left(1, 1, \left(1 + y\right) \cdot \left(-\frac{x - y}{1 \cdot 1 - y \cdot y}\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;1 - \log \left(\mathsf{fma}\left(\frac{1}{y}, \frac{x}{y}, \frac{x}{y} - \frac{1}{y}\right)\right)\\
\end{array}double f(double x, double y) {
double r15640083 = 1.0;
double r15640084 = x;
double r15640085 = y;
double r15640086 = r15640084 - r15640085;
double r15640087 = r15640083 - r15640085;
double r15640088 = r15640086 / r15640087;
double r15640089 = r15640083 - r15640088;
double r15640090 = log(r15640089);
double r15640091 = r15640083 - r15640090;
return r15640091;
}
double f(double x, double y) {
double r15640092 = y;
double r15640093 = -34474611802046.883;
bool r15640094 = r15640092 <= r15640093;
double r15640095 = 1.0;
double r15640096 = r15640095 / r15640092;
double r15640097 = x;
double r15640098 = r15640097 / r15640092;
double r15640099 = r15640098 - r15640096;
double r15640100 = fma(r15640096, r15640098, r15640099);
double r15640101 = log(r15640100);
double r15640102 = r15640095 - r15640101;
double r15640103 = 43744445.70071104;
bool r15640104 = r15640092 <= r15640103;
double r15640105 = r15640095 + r15640092;
double r15640106 = -r15640105;
double r15640107 = r15640097 - r15640092;
double r15640108 = r15640095 * r15640095;
double r15640109 = r15640092 * r15640092;
double r15640110 = r15640108 - r15640109;
double r15640111 = r15640107 / r15640110;
double r15640112 = r15640105 * r15640111;
double r15640113 = fma(r15640106, r15640111, r15640112);
double r15640114 = 1.0;
double r15640115 = -r15640111;
double r15640116 = r15640105 * r15640115;
double r15640117 = fma(r15640114, r15640095, r15640116);
double r15640118 = r15640113 + r15640117;
double r15640119 = log(r15640118);
double r15640120 = r15640095 - r15640119;
double r15640121 = r15640104 ? r15640120 : r15640102;
double r15640122 = r15640094 ? r15640102 : r15640121;
return r15640122;
}




Bits error versus x




Bits error versus y
| Original | 18.5 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
if y < -34474611802046.883 or 43744445.70071104 < y Initial program 47.4
Taylor expanded around inf 0.0
Simplified0.0
if -34474611802046.883 < y < 43744445.70071104Initial program 0.2
rmApplied flip--0.2
Applied associate-/r/0.2
Applied *-un-lft-identity0.2
Applied prod-diff0.2
Final simplification0.1
herbie shell --seed 2019174 +o rules:numerics
(FPCore (x y)
:name "Numeric.SpecFunctions:invIncompleteGamma from math-functions-0.1.5.2, B"
:herbie-target
(if (< y -81284752.61947241) (- 1.0 (log (- (/ x (* y y)) (- (/ 1.0 y) (/ x y))))) (if (< y 3.0094271212461764e+25) (log (/ (exp 1.0) (- 1.0 (/ (- x y) (- 1.0 y))))) (- 1.0 (log (- (/ x (* y y)) (- (/ 1.0 y) (/ x y)))))))
(- 1.0 (log (- 1.0 (/ (- x y) (- 1.0 y))))))