Average Error: 35.0 → 25.6
Time: 18.8s
Precision: 64
\[\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3.0}}\]
\[\begin{array}{l} \mathbf{if}\;x \le -6.208442960829875 \cdot 10^{+137}:\\ \;\;\;\;\left(-x\right) \cdot \sqrt{0.3333333333333333}\\ \mathbf{elif}\;x \le -1.9111814054112648 \cdot 10^{-98}:\\ \;\;\;\;\sqrt{z \cdot z + \left(y \cdot y + x \cdot x\right)} \cdot \sqrt{\frac{1}{3.0}}\\ \mathbf{elif}\;x \le -8.598460374864875 \cdot 10^{-202}:\\ \;\;\;\;\sqrt{0.3333333333333333} \cdot z\\ \mathbf{elif}\;x \le 9.794009169674087 \cdot 10^{+109}:\\ \;\;\;\;\sqrt{z \cdot z + \left(y \cdot y + x \cdot x\right)} \cdot \sqrt{\frac{1}{3.0}}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{0.3333333333333333} \cdot x\\ \end{array}\]
\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3.0}}
\begin{array}{l}
\mathbf{if}\;x \le -6.208442960829875 \cdot 10^{+137}:\\
\;\;\;\;\left(-x\right) \cdot \sqrt{0.3333333333333333}\\

\mathbf{elif}\;x \le -1.9111814054112648 \cdot 10^{-98}:\\
\;\;\;\;\sqrt{z \cdot z + \left(y \cdot y + x \cdot x\right)} \cdot \sqrt{\frac{1}{3.0}}\\

\mathbf{elif}\;x \le -8.598460374864875 \cdot 10^{-202}:\\
\;\;\;\;\sqrt{0.3333333333333333} \cdot z\\

\mathbf{elif}\;x \le 9.794009169674087 \cdot 10^{+109}:\\
\;\;\;\;\sqrt{z \cdot z + \left(y \cdot y + x \cdot x\right)} \cdot \sqrt{\frac{1}{3.0}}\\

\mathbf{else}:\\
\;\;\;\;\sqrt{0.3333333333333333} \cdot x\\

\end{array}
double f(double x, double y, double z) {
        double r43333667 = x;
        double r43333668 = r43333667 * r43333667;
        double r43333669 = y;
        double r43333670 = r43333669 * r43333669;
        double r43333671 = r43333668 + r43333670;
        double r43333672 = z;
        double r43333673 = r43333672 * r43333672;
        double r43333674 = r43333671 + r43333673;
        double r43333675 = 3.0;
        double r43333676 = r43333674 / r43333675;
        double r43333677 = sqrt(r43333676);
        return r43333677;
}

double f(double x, double y, double z) {
        double r43333678 = x;
        double r43333679 = -6.208442960829875e+137;
        bool r43333680 = r43333678 <= r43333679;
        double r43333681 = -r43333678;
        double r43333682 = 0.3333333333333333;
        double r43333683 = sqrt(r43333682);
        double r43333684 = r43333681 * r43333683;
        double r43333685 = -1.9111814054112648e-98;
        bool r43333686 = r43333678 <= r43333685;
        double r43333687 = z;
        double r43333688 = r43333687 * r43333687;
        double r43333689 = y;
        double r43333690 = r43333689 * r43333689;
        double r43333691 = r43333678 * r43333678;
        double r43333692 = r43333690 + r43333691;
        double r43333693 = r43333688 + r43333692;
        double r43333694 = sqrt(r43333693);
        double r43333695 = 1.0;
        double r43333696 = 3.0;
        double r43333697 = r43333695 / r43333696;
        double r43333698 = sqrt(r43333697);
        double r43333699 = r43333694 * r43333698;
        double r43333700 = -8.598460374864875e-202;
        bool r43333701 = r43333678 <= r43333700;
        double r43333702 = r43333683 * r43333687;
        double r43333703 = 9.794009169674087e+109;
        bool r43333704 = r43333678 <= r43333703;
        double r43333705 = r43333683 * r43333678;
        double r43333706 = r43333704 ? r43333699 : r43333705;
        double r43333707 = r43333701 ? r43333702 : r43333706;
        double r43333708 = r43333686 ? r43333699 : r43333707;
        double r43333709 = r43333680 ? r43333684 : r43333708;
        return r43333709;
}

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

Original35.0
Target23.5
Herbie25.6
\[\begin{array}{l} \mathbf{if}\;z \lt -6.396479394109776 \cdot 10^{+136}:\\ \;\;\;\;\frac{-z}{\sqrt{3.0}}\\ \mathbf{elif}\;z \lt 7.320293694404182 \cdot 10^{+117}:\\ \;\;\;\;\frac{\sqrt{\left(z \cdot z + x \cdot x\right) + y \cdot y}}{\sqrt{3.0}}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{0.3333333333333333} \cdot z\\ \end{array}\]

Derivation

  1. Split input into 4 regimes
  2. if x < -6.208442960829875e+137

    1. Initial program 56.2

      \[\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3.0}}\]
    2. Taylor expanded around -inf 15.3

      \[\leadsto \color{blue}{-1 \cdot \left(x \cdot \sqrt{0.3333333333333333}\right)}\]
    3. Simplified15.3

      \[\leadsto \color{blue}{\left(-x\right) \cdot \sqrt{0.3333333333333333}}\]

    if -6.208442960829875e+137 < x < -1.9111814054112648e-98 or -8.598460374864875e-202 < x < 9.794009169674087e+109

    1. Initial program 27.1

      \[\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3.0}}\]
    2. Using strategy rm
    3. Applied div-inv27.1

      \[\leadsto \sqrt{\color{blue}{\left(\left(x \cdot x + y \cdot y\right) + z \cdot z\right) \cdot \frac{1}{3.0}}}\]
    4. Applied sqrt-prod27.2

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

    if -1.9111814054112648e-98 < x < -8.598460374864875e-202

    1. Initial program 28.2

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

      \[\leadsto \color{blue}{z \cdot \sqrt{0.3333333333333333}}\]

    if 9.794009169674087e+109 < x

    1. Initial program 52.0

      \[\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3.0}}\]
    2. Taylor expanded around inf 16.8

      \[\leadsto \color{blue}{x \cdot \sqrt{0.3333333333333333}}\]
  3. Recombined 4 regimes into one program.
  4. Final simplification25.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -6.208442960829875 \cdot 10^{+137}:\\ \;\;\;\;\left(-x\right) \cdot \sqrt{0.3333333333333333}\\ \mathbf{elif}\;x \le -1.9111814054112648 \cdot 10^{-98}:\\ \;\;\;\;\sqrt{z \cdot z + \left(y \cdot y + x \cdot x\right)} \cdot \sqrt{\frac{1}{3.0}}\\ \mathbf{elif}\;x \le -8.598460374864875 \cdot 10^{-202}:\\ \;\;\;\;\sqrt{0.3333333333333333} \cdot z\\ \mathbf{elif}\;x \le 9.794009169674087 \cdot 10^{+109}:\\ \;\;\;\;\sqrt{z \cdot z + \left(y \cdot y + x \cdot x\right)} \cdot \sqrt{\frac{1}{3.0}}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{0.3333333333333333} \cdot x\\ \end{array}\]

Reproduce

herbie shell --seed 2019158 
(FPCore (x y z)
  :name "Data.Array.Repa.Algorithms.Pixel:doubleRmsOfRGB8 from repa-algorithms-3.4.0.1"

  :herbie-target
  (if (< z -6.396479394109776e+136) (/ (- z) (sqrt 3.0)) (if (< z 7.320293694404182e+117) (/ (sqrt (+ (+ (* z z) (* x x)) (* y y))) (sqrt 3.0)) (* (sqrt 0.3333333333333333) z)))

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