\log \left(1 + e^{x}\right) - x \cdot y\begin{array}{l}
\mathbf{if}\;x \le -1.694724557776266 \cdot 10^{-5}:\\
\;\;\;\;\log \left(1 \cdot 1 - e^{x} \cdot e^{x}\right) - \mathsf{fma}\left(x, y, \log \left(1 - e^{x}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(x, 0.5 - y, \log 2\right)\\
\end{array}double f(double x, double y) {
double r162495 = 1.0;
double r162496 = x;
double r162497 = exp(r162496);
double r162498 = r162495 + r162497;
double r162499 = log(r162498);
double r162500 = y;
double r162501 = r162496 * r162500;
double r162502 = r162499 - r162501;
return r162502;
}
double f(double x, double y) {
double r162503 = x;
double r162504 = -1.694724557776266e-05;
bool r162505 = r162503 <= r162504;
double r162506 = 1.0;
double r162507 = r162506 * r162506;
double r162508 = exp(r162503);
double r162509 = r162508 * r162508;
double r162510 = r162507 - r162509;
double r162511 = log(r162510);
double r162512 = y;
double r162513 = r162506 - r162508;
double r162514 = log(r162513);
double r162515 = fma(r162503, r162512, r162514);
double r162516 = r162511 - r162515;
double r162517 = 0.5;
double r162518 = r162517 - r162512;
double r162519 = 2.0;
double r162520 = log(r162519);
double r162521 = fma(r162503, r162518, r162520);
double r162522 = r162505 ? r162516 : r162521;
return r162522;
}




Bits error versus x




Bits error versus y
| Original | 0.5 |
|---|---|
| Target | 0.1 |
| Herbie | 0.5 |
if x < -1.694724557776266e-05Initial program 0.2
rmApplied flip-+0.2
Applied log-div0.2
Applied associate--l-0.2
Simplified0.2
if -1.694724557776266e-05 < x Initial program 0.7
rmApplied pow10.7
Applied log-pow0.7
Applied prod-diff0.7
Simplified0.7
Simplified0.7
Taylor expanded around 0 0.6
Simplified0.6
Final simplification0.5
herbie shell --seed 2020043 +o rules:numerics
(FPCore (x y)
:name "Logistic regression 2"
:precision binary64
:herbie-target
(if (<= x 0.0) (- (log (+ 1 (exp x))) (* x y)) (- (log (+ 1 (exp (- x)))) (* (- x) (- 1 y))))
(- (log (+ 1 (exp x))) (* x y)))