Average Error: 12.0 → 1.7
Time: 11.6s
Precision: 64
\[\frac{x \cdot \left(y + z\right)}{z}\]
\[\begin{array}{l} \mathbf{if}\;z \le -7.8753853100710241 \cdot 10^{73}:\\ \;\;\;\;\frac{x}{\frac{z}{y}} + x\\ \mathbf{elif}\;z \le 1508501975980006900:\\ \;\;\;\;\frac{x \cdot y}{z} + x\\ \mathbf{else}:\\ \;\;\;\;x \cdot \frac{y}{z} + x\\ \end{array}\]
\frac{x \cdot \left(y + z\right)}{z}
\begin{array}{l}
\mathbf{if}\;z \le -7.8753853100710241 \cdot 10^{73}:\\
\;\;\;\;\frac{x}{\frac{z}{y}} + x\\

\mathbf{elif}\;z \le 1508501975980006900:\\
\;\;\;\;\frac{x \cdot y}{z} + x\\

\mathbf{else}:\\
\;\;\;\;x \cdot \frac{y}{z} + x\\

\end{array}
double f(double x, double y, double z) {
        double r351082 = x;
        double r351083 = y;
        double r351084 = z;
        double r351085 = r351083 + r351084;
        double r351086 = r351082 * r351085;
        double r351087 = r351086 / r351084;
        return r351087;
}

double f(double x, double y, double z) {
        double r351088 = z;
        double r351089 = -7.875385310071024e+73;
        bool r351090 = r351088 <= r351089;
        double r351091 = x;
        double r351092 = y;
        double r351093 = r351088 / r351092;
        double r351094 = r351091 / r351093;
        double r351095 = r351094 + r351091;
        double r351096 = 1.508501975980007e+18;
        bool r351097 = r351088 <= r351096;
        double r351098 = r351091 * r351092;
        double r351099 = r351098 / r351088;
        double r351100 = r351099 + r351091;
        double r351101 = r351092 / r351088;
        double r351102 = r351091 * r351101;
        double r351103 = r351102 + r351091;
        double r351104 = r351097 ? r351100 : r351103;
        double r351105 = r351090 ? r351095 : r351104;
        return r351105;
}

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

Original12.0
Target2.9
Herbie1.7
\[\frac{x}{\frac{z}{y + z}}\]

Derivation

  1. Split input into 3 regimes
  2. if z < -7.875385310071024e+73

    1. Initial program 19.3

      \[\frac{x \cdot \left(y + z\right)}{z}\]
    2. Simplified3.1

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{x}{z}, y, x\right)}\]
    3. Using strategy rm
    4. Applied fma-udef3.1

      \[\leadsto \color{blue}{\frac{x}{z} \cdot y + x}\]
    5. Simplified6.2

      \[\leadsto \color{blue}{\frac{x \cdot y}{z}} + x\]
    6. Using strategy rm
    7. Applied associate-/l*0.0

      \[\leadsto \color{blue}{\frac{x}{\frac{z}{y}}} + x\]

    if -7.875385310071024e+73 < z < 1.508501975980007e+18

    1. Initial program 6.1

      \[\frac{x \cdot \left(y + z\right)}{z}\]
    2. Simplified7.2

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{x}{z}, y, x\right)}\]
    3. Using strategy rm
    4. Applied fma-udef7.2

      \[\leadsto \color{blue}{\frac{x}{z} \cdot y + x}\]
    5. Simplified3.3

      \[\leadsto \color{blue}{\frac{x \cdot y}{z}} + x\]
    6. Using strategy rm
    7. Applied *-un-lft-identity3.3

      \[\leadsto \frac{x \cdot y}{\color{blue}{1 \cdot z}} + x\]
    8. Applied times-frac6.2

      \[\leadsto \color{blue}{\frac{x}{1} \cdot \frac{y}{z}} + x\]
    9. Simplified6.2

      \[\leadsto \color{blue}{x} \cdot \frac{y}{z} + x\]
    10. Using strategy rm
    11. Applied associate-*r/3.3

      \[\leadsto \color{blue}{\frac{x \cdot y}{z}} + x\]

    if 1.508501975980007e+18 < z

    1. Initial program 17.0

      \[\frac{x \cdot \left(y + z\right)}{z}\]
    2. Simplified2.9

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{x}{z}, y, x\right)}\]
    3. Using strategy rm
    4. Applied fma-udef2.9

      \[\leadsto \color{blue}{\frac{x}{z} \cdot y + x}\]
    5. Simplified5.8

      \[\leadsto \color{blue}{\frac{x \cdot y}{z}} + x\]
    6. Using strategy rm
    7. Applied *-un-lft-identity5.8

      \[\leadsto \frac{x \cdot y}{\color{blue}{1 \cdot z}} + x\]
    8. Applied times-frac0.0

      \[\leadsto \color{blue}{\frac{x}{1} \cdot \frac{y}{z}} + x\]
    9. Simplified0.0

      \[\leadsto \color{blue}{x} \cdot \frac{y}{z} + x\]
  3. Recombined 3 regimes into one program.
  4. Final simplification1.7

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -7.8753853100710241 \cdot 10^{73}:\\ \;\;\;\;\frac{x}{\frac{z}{y}} + x\\ \mathbf{elif}\;z \le 1508501975980006900:\\ \;\;\;\;\frac{x \cdot y}{z} + x\\ \mathbf{else}:\\ \;\;\;\;x \cdot \frac{y}{z} + x\\ \end{array}\]

Reproduce

herbie shell --seed 2019198 +o rules:numerics
(FPCore (x y z)
  :name "Numeric.SpecFunctions:choose from math-functions-0.1.5.2"

  :herbie-target
  (/ x (/ z (+ y z)))

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