Average Error: 9.9 → 0.9
Time: 2.2s
Precision: 64
\[\frac{x + y \cdot \left(z - x\right)}{z}\]
\[\begin{array}{l} \mathbf{if}\;z \le -4.75458451445823469 \cdot 10^{106} \lor \neg \left(z \le 1.56001186660193854 \cdot 10^{-105}\right):\\ \;\;\;\;\left(\frac{x}{z} + y\right) - x \cdot \left(\frac{1}{z} \cdot y\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{x + y \cdot \left(z - x\right)}{z}\\ \end{array}\]
\frac{x + y \cdot \left(z - x\right)}{z}
\begin{array}{l}
\mathbf{if}\;z \le -4.75458451445823469 \cdot 10^{106} \lor \neg \left(z \le 1.56001186660193854 \cdot 10^{-105}\right):\\
\;\;\;\;\left(\frac{x}{z} + y\right) - x \cdot \left(\frac{1}{z} \cdot y\right)\\

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

\end{array}
double f(double x, double y, double z) {
        double r716093 = x;
        double r716094 = y;
        double r716095 = z;
        double r716096 = r716095 - r716093;
        double r716097 = r716094 * r716096;
        double r716098 = r716093 + r716097;
        double r716099 = r716098 / r716095;
        return r716099;
}

double f(double x, double y, double z) {
        double r716100 = z;
        double r716101 = -4.754584514458235e+106;
        bool r716102 = r716100 <= r716101;
        double r716103 = 1.5600118666019385e-105;
        bool r716104 = r716100 <= r716103;
        double r716105 = !r716104;
        bool r716106 = r716102 || r716105;
        double r716107 = x;
        double r716108 = r716107 / r716100;
        double r716109 = y;
        double r716110 = r716108 + r716109;
        double r716111 = 1.0;
        double r716112 = r716111 / r716100;
        double r716113 = r716112 * r716109;
        double r716114 = r716107 * r716113;
        double r716115 = r716110 - r716114;
        double r716116 = r716100 - r716107;
        double r716117 = r716109 * r716116;
        double r716118 = r716107 + r716117;
        double r716119 = r716118 / r716100;
        double r716120 = r716106 ? r716115 : r716119;
        return r716120;
}

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.9
Target0.0
Herbie0.9
\[\left(y + \frac{x}{z}\right) - \frac{y}{\frac{z}{x}}\]

Derivation

  1. Split input into 2 regimes
  2. if z < -4.754584514458235e+106 or 1.5600118666019385e-105 < z

    1. Initial program 16.0

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

      \[\leadsto \color{blue}{\left(\frac{x}{z} + y\right) - \frac{x \cdot y}{z}}\]
    3. Taylor expanded around 0 5.4

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

      \[\leadsto \left(\frac{x}{z} + y\right) - \color{blue}{\frac{x}{z} \cdot y}\]
    5. Using strategy rm
    6. Applied div-inv0.0

      \[\leadsto \left(\frac{x}{z} + y\right) - \color{blue}{\left(x \cdot \frac{1}{z}\right)} \cdot y\]
    7. Applied associate-*l*0.5

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

    if -4.754584514458235e+106 < z < 1.5600118666019385e-105

    1. Initial program 1.5

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -4.75458451445823469 \cdot 10^{106} \lor \neg \left(z \le 1.56001186660193854 \cdot 10^{-105}\right):\\ \;\;\;\;\left(\frac{x}{z} + y\right) - x \cdot \left(\frac{1}{z} \cdot y\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{x + y \cdot \left(z - x\right)}{z}\\ \end{array}\]

Reproduce

herbie shell --seed 2020062 
(FPCore (x y z)
  :name "Diagrams.Backend.Rasterific:rasterificRadialGradient from diagrams-rasterific-1.3.1.3"
  :precision binary64

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

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