1 - \log \left(1 - \frac{x - y}{1 - y}\right)\begin{array}{l}
\mathbf{if}\;y \le -47727873.56991197168827056884765625 \lor \neg \left(y \le 0.996418055055319551449599657644284889102\right):\\
\;\;\;\;1 - \log \left(\mathsf{fma}\left(\frac{1}{y}, \frac{x}{y}, \frac{x}{y} - \frac{1}{y}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;1 - \log \left(\mathsf{fma}\left(\frac{\sqrt[3]{x - y}}{\sqrt{1 - y}}, -\frac{\sqrt[3]{x - y}}{\frac{\sqrt{1 - y}}{\sqrt[3]{x - y}}}, 1\right) + \left(\frac{\sqrt[3]{x - y}}{\sqrt{1 - y}} + \frac{-\sqrt[3]{x - y}}{\sqrt{1 - y}}\right) \cdot \left(\sqrt[3]{x - y} \cdot \frac{\sqrt[3]{x - y}}{\sqrt{1 - y}}\right)\right)\\
\end{array}double f(double x, double y) {
double r362177 = 1.0;
double r362178 = x;
double r362179 = y;
double r362180 = r362178 - r362179;
double r362181 = r362177 - r362179;
double r362182 = r362180 / r362181;
double r362183 = r362177 - r362182;
double r362184 = log(r362183);
double r362185 = r362177 - r362184;
return r362185;
}
double f(double x, double y) {
double r362186 = y;
double r362187 = -47727873.56991197;
bool r362188 = r362186 <= r362187;
double r362189 = 0.9964180550553196;
bool r362190 = r362186 <= r362189;
double r362191 = !r362190;
bool r362192 = r362188 || r362191;
double r362193 = 1.0;
double r362194 = r362193 / r362186;
double r362195 = x;
double r362196 = r362195 / r362186;
double r362197 = r362196 - r362194;
double r362198 = fma(r362194, r362196, r362197);
double r362199 = log(r362198);
double r362200 = r362193 - r362199;
double r362201 = r362195 - r362186;
double r362202 = cbrt(r362201);
double r362203 = r362193 - r362186;
double r362204 = sqrt(r362203);
double r362205 = r362202 / r362204;
double r362206 = r362204 / r362202;
double r362207 = r362202 / r362206;
double r362208 = -r362207;
double r362209 = fma(r362205, r362208, r362193);
double r362210 = -r362202;
double r362211 = r362210 / r362204;
double r362212 = r362205 + r362211;
double r362213 = r362202 * r362205;
double r362214 = r362212 * r362213;
double r362215 = r362209 + r362214;
double r362216 = log(r362215);
double r362217 = r362193 - r362216;
double r362218 = r362192 ? r362200 : r362217;
return r362218;
}




Bits error versus x




Bits error versus y
| Original | 18.4 |
|---|---|
| Target | 0.1 |
| Herbie | 0.2 |
if y < -47727873.56991197 or 0.9964180550553196 < y Initial program 47.2
Taylor expanded around inf 0.2
Simplified0.2
if -47727873.56991197 < y < 0.9964180550553196Initial program 0.1
rmApplied add-sqr-sqrt0.1
Applied add-cube-cbrt0.1
Applied times-frac0.1
Applied add-sqr-sqrt0.1
Applied prod-diff0.1
Simplified0.1
Simplified0.1
Final simplification0.2
herbie shell --seed 2019179 +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))))))