Average Error: 9.6 → 0.2
Time: 13.0s
Precision: 64
\[\frac{x \cdot \left(\left(y - z\right) + 1.0\right)}{z}\]
\[\begin{array}{l} \mathbf{if}\;x \le -1.3418778201574405 \cdot 10^{-43}:\\ \;\;\;\;\frac{x}{\frac{z}{\left(y - z\right) + 1.0}}\\ \mathbf{elif}\;x \le 1.2340705215670025 \cdot 10^{-123}:\\ \;\;\;\;\left(\frac{x}{z} \cdot 1.0 + \frac{y \cdot x}{z}\right) - x\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{x}{z} \cdot 1.0 + \frac{x}{z} \cdot y\right) - x\\ \end{array}\]
\frac{x \cdot \left(\left(y - z\right) + 1.0\right)}{z}
\begin{array}{l}
\mathbf{if}\;x \le -1.3418778201574405 \cdot 10^{-43}:\\
\;\;\;\;\frac{x}{\frac{z}{\left(y - z\right) + 1.0}}\\

\mathbf{elif}\;x \le 1.2340705215670025 \cdot 10^{-123}:\\
\;\;\;\;\left(\frac{x}{z} \cdot 1.0 + \frac{y \cdot x}{z}\right) - x\\

\mathbf{else}:\\
\;\;\;\;\left(\frac{x}{z} \cdot 1.0 + \frac{x}{z} \cdot y\right) - x\\

\end{array}
double f(double x, double y, double z) {
        double r34699031 = x;
        double r34699032 = y;
        double r34699033 = z;
        double r34699034 = r34699032 - r34699033;
        double r34699035 = 1.0;
        double r34699036 = r34699034 + r34699035;
        double r34699037 = r34699031 * r34699036;
        double r34699038 = r34699037 / r34699033;
        return r34699038;
}

double f(double x, double y, double z) {
        double r34699039 = x;
        double r34699040 = -1.3418778201574405e-43;
        bool r34699041 = r34699039 <= r34699040;
        double r34699042 = z;
        double r34699043 = y;
        double r34699044 = r34699043 - r34699042;
        double r34699045 = 1.0;
        double r34699046 = r34699044 + r34699045;
        double r34699047 = r34699042 / r34699046;
        double r34699048 = r34699039 / r34699047;
        double r34699049 = 1.2340705215670025e-123;
        bool r34699050 = r34699039 <= r34699049;
        double r34699051 = r34699039 / r34699042;
        double r34699052 = r34699051 * r34699045;
        double r34699053 = r34699043 * r34699039;
        double r34699054 = r34699053 / r34699042;
        double r34699055 = r34699052 + r34699054;
        double r34699056 = r34699055 - r34699039;
        double r34699057 = r34699051 * r34699043;
        double r34699058 = r34699052 + r34699057;
        double r34699059 = r34699058 - r34699039;
        double r34699060 = r34699050 ? r34699056 : r34699059;
        double r34699061 = r34699041 ? r34699048 : r34699060;
        return r34699061;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original9.6
Target0.4
Herbie0.2
\[\begin{array}{l} \mathbf{if}\;x \lt -2.71483106713436 \cdot 10^{-162}:\\ \;\;\;\;\left(1 + y\right) \cdot \frac{x}{z} - x\\ \mathbf{elif}\;x \lt 3.874108816439546 \cdot 10^{-197}:\\ \;\;\;\;\left(x \cdot \left(\left(y - z\right) + 1.0\right)\right) \cdot \frac{1}{z}\\ \mathbf{else}:\\ \;\;\;\;\left(1 + y\right) \cdot \frac{x}{z} - x\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if x < -1.3418778201574405e-43

    1. Initial program 20.1

      \[\frac{x \cdot \left(\left(y - z\right) + 1.0\right)}{z}\]
    2. Using strategy rm
    3. Applied associate-/l*0.2

      \[\leadsto \color{blue}{\frac{x}{\frac{z}{\left(y - z\right) + 1.0}}}\]

    if -1.3418778201574405e-43 < x < 1.2340705215670025e-123

    1. Initial program 0.1

      \[\frac{x \cdot \left(\left(y - z\right) + 1.0\right)}{z}\]
    2. Taylor expanded around 0 0.1

      \[\leadsto \color{blue}{\left(\frac{x \cdot y}{z} + 1.0 \cdot \frac{x}{z}\right) - x}\]

    if 1.2340705215670025e-123 < x

    1. Initial program 15.9

      \[\frac{x \cdot \left(\left(y - z\right) + 1.0\right)}{z}\]
    2. Using strategy rm
    3. Applied associate-/l*1.0

      \[\leadsto \color{blue}{\frac{x}{\frac{z}{\left(y - z\right) + 1.0}}}\]
    4. Taylor expanded around 0 5.5

      \[\leadsto \color{blue}{\left(\frac{x \cdot y}{z} + 1.0 \cdot \frac{x}{z}\right) - x}\]
    5. Simplified0.2

      \[\leadsto \color{blue}{\left(\frac{x}{z} \cdot y + \frac{x}{z} \cdot 1.0\right) - x}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.2

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -1.3418778201574405 \cdot 10^{-43}:\\ \;\;\;\;\frac{x}{\frac{z}{\left(y - z\right) + 1.0}}\\ \mathbf{elif}\;x \le 1.2340705215670025 \cdot 10^{-123}:\\ \;\;\;\;\left(\frac{x}{z} \cdot 1.0 + \frac{y \cdot x}{z}\right) - x\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{x}{z} \cdot 1.0 + \frac{x}{z} \cdot y\right) - x\\ \end{array}\]

Reproduce

herbie shell --seed 2019162 
(FPCore (x y z)
  :name "Diagrams.TwoD.Segment.Bernstein:evaluateBernstein from diagrams-lib-1.3.0.3"

  :herbie-target
  (if (< x -2.71483106713436e-162) (- (* (+ 1 y) (/ x z)) x) (if (< x 3.874108816439546e-197) (* (* x (+ (- y z) 1.0)) (/ 1 z)) (- (* (+ 1 y) (/ x z)) x)))

  (/ (* x (+ (- y z) 1.0)) z))