Average Error: 0.6 → 0.5
Time: 11.5s
Precision: 64
\[\log \left(1 + e^{x}\right) - x \cdot y\]
\[e^{\left(\log \left(\log 2\right) + 0.5 \cdot \frac{x}{\log 2}\right) - \frac{{x}^{2}}{\log 2} \cdot \left(\left(\frac{0.125}{\log 2} + \frac{\frac{1}{2}}{{2}^{2}}\right) - 0.25\right)} - x \cdot y\]
\log \left(1 + e^{x}\right) - x \cdot y
e^{\left(\log \left(\log 2\right) + 0.5 \cdot \frac{x}{\log 2}\right) - \frac{{x}^{2}}{\log 2} \cdot \left(\left(\frac{0.125}{\log 2} + \frac{\frac{1}{2}}{{2}^{2}}\right) - 0.25\right)} - x \cdot y
double f(double x, double y) {
        double r186565 = 1.0;
        double r186566 = x;
        double r186567 = exp(r186566);
        double r186568 = r186565 + r186567;
        double r186569 = log(r186568);
        double r186570 = y;
        double r186571 = r186566 * r186570;
        double r186572 = r186569 - r186571;
        return r186572;
}

double f(double x, double y) {
        double r186573 = 2.0;
        double r186574 = log(r186573);
        double r186575 = log(r186574);
        double r186576 = 0.5;
        double r186577 = x;
        double r186578 = r186577 / r186574;
        double r186579 = r186576 * r186578;
        double r186580 = r186575 + r186579;
        double r186581 = 2.0;
        double r186582 = pow(r186577, r186581);
        double r186583 = r186582 / r186574;
        double r186584 = 0.125;
        double r186585 = r186584 / r186574;
        double r186586 = 0.5;
        double r186587 = pow(r186573, r186581);
        double r186588 = r186586 / r186587;
        double r186589 = r186585 + r186588;
        double r186590 = 0.25;
        double r186591 = r186589 - r186590;
        double r186592 = r186583 * r186591;
        double r186593 = r186580 - r186592;
        double r186594 = exp(r186593);
        double r186595 = y;
        double r186596 = r186577 * r186595;
        double r186597 = r186594 - r186596;
        return r186597;
}

Error

Bits error versus x

Bits error versus y

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original0.6
Target0.1
Herbie0.5
\[\begin{array}{l} \mathbf{if}\;x \le 0.0:\\ \;\;\;\;\log \left(1 + e^{x}\right) - x \cdot y\\ \mathbf{else}:\\ \;\;\;\;\log \left(1 + e^{-x}\right) - \left(-x\right) \cdot \left(1 - y\right)\\ \end{array}\]

Derivation

  1. Initial program 0.6

    \[\log \left(1 + e^{x}\right) - x \cdot y\]
  2. Using strategy rm
  3. Applied add-exp-log0.6

    \[\leadsto \color{blue}{e^{\log \left(\log \left(1 + e^{x}\right)\right)}} - x \cdot y\]
  4. Taylor expanded around 0 7.9

    \[\leadsto e^{\color{blue}{\left(0.25 \cdot \frac{{x}^{2}}{\log 2} + \left(\log \left(\log 2\right) + 0.5 \cdot \frac{x}{\log 2}\right)\right) - \left(0.125 \cdot \frac{{x}^{2}}{{\left(\log 2\right)}^{2}} + \frac{1}{2} \cdot \frac{{x}^{2}}{\log 2 \cdot {2}^{2}}\right)}} - x \cdot y\]
  5. Simplified0.5

    \[\leadsto e^{\color{blue}{\left(\log \left(\log 2\right) + 0.5 \cdot \frac{x}{\log 2}\right) - \frac{{x}^{2}}{\log 2} \cdot \left(\left(\frac{0.125}{\log 2} + \frac{\frac{1}{2}}{{2}^{2}}\right) - 0.25\right)}} - x \cdot y\]
  6. Final simplification0.5

    \[\leadsto e^{\left(\log \left(\log 2\right) + 0.5 \cdot \frac{x}{\log 2}\right) - \frac{{x}^{2}}{\log 2} \cdot \left(\left(\frac{0.125}{\log 2} + \frac{\frac{1}{2}}{{2}^{2}}\right) - 0.25\right)} - x \cdot y\]

Reproduce

herbie shell --seed 2019351 
(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)))