Average Error: 9.9 → 0.9
Time: 2.1s
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 r809357 = x;
        double r809358 = y;
        double r809359 = z;
        double r809360 = r809359 - r809357;
        double r809361 = r809358 * r809360;
        double r809362 = r809357 + r809361;
        double r809363 = r809362 / r809359;
        return r809363;
}

double f(double x, double y, double z) {
        double r809364 = z;
        double r809365 = -4.754584514458235e+106;
        bool r809366 = r809364 <= r809365;
        double r809367 = 1.5600118666019385e-105;
        bool r809368 = r809364 <= r809367;
        double r809369 = !r809368;
        bool r809370 = r809366 || r809369;
        double r809371 = x;
        double r809372 = r809371 / r809364;
        double r809373 = y;
        double r809374 = r809372 + r809373;
        double r809375 = 1.0;
        double r809376 = r809375 / r809364;
        double r809377 = r809376 * r809373;
        double r809378 = r809371 * r809377;
        double r809379 = r809374 - r809378;
        double r809380 = r809364 - r809371;
        double r809381 = r809373 * r809380;
        double r809382 = r809371 + r809381;
        double r809383 = r809382 / r809364;
        double r809384 = r809370 ? r809379 : r809383;
        return r809384;
}

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))