Average Error: 37.5 → 26.9
Time: 4.3s
Precision: 64
\[\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3}}\]
\[\begin{array}{l} \mathbf{if}\;x \le -2.04694359430339678 \cdot 10^{129}:\\ \;\;\;\;-1 \cdot \left(x \cdot \sqrt{0.333333333333333315}\right)\\ \mathbf{elif}\;x \le -5.1573652837714696 \cdot 10^{-105}:\\ \;\;\;\;\sqrt{0.333333333333333315 \cdot \mathsf{fma}\left(x, x, \mathsf{fma}\left(y, y, z \cdot z\right)\right)}\\ \mathbf{elif}\;x \le -4.6992675325234154 \cdot 10^{-229}:\\ \;\;\;\;z \cdot \sqrt{0.333333333333333315}\\ \mathbf{elif}\;x \le 4.9296672245653324 \cdot 10^{135}:\\ \;\;\;\;\sqrt{0.333333333333333315 \cdot \mathsf{fma}\left(x, x, \mathsf{fma}\left(y, y, z \cdot z\right)\right)}\\ \mathbf{else}:\\ \;\;\;\;x \cdot \sqrt{0.333333333333333315}\\ \end{array}\]
\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3}}
\begin{array}{l}
\mathbf{if}\;x \le -2.04694359430339678 \cdot 10^{129}:\\
\;\;\;\;-1 \cdot \left(x \cdot \sqrt{0.333333333333333315}\right)\\

\mathbf{elif}\;x \le -5.1573652837714696 \cdot 10^{-105}:\\
\;\;\;\;\sqrt{0.333333333333333315 \cdot \mathsf{fma}\left(x, x, \mathsf{fma}\left(y, y, z \cdot z\right)\right)}\\

\mathbf{elif}\;x \le -4.6992675325234154 \cdot 10^{-229}:\\
\;\;\;\;z \cdot \sqrt{0.333333333333333315}\\

\mathbf{elif}\;x \le 4.9296672245653324 \cdot 10^{135}:\\
\;\;\;\;\sqrt{0.333333333333333315 \cdot \mathsf{fma}\left(x, x, \mathsf{fma}\left(y, y, z \cdot z\right)\right)}\\

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

\end{array}
double code(double x, double y, double z) {
	return sqrt(((((x * x) + (y * y)) + (z * z)) / 3.0));
}
double code(double x, double y, double z) {
	double VAR;
	if ((x <= -2.0469435943033968e+129)) {
		VAR = (-1.0 * (x * sqrt(0.3333333333333333)));
	} else {
		double VAR_1;
		if ((x <= -5.1573652837714696e-105)) {
			VAR_1 = sqrt((0.3333333333333333 * fma(x, x, fma(y, y, (z * z)))));
		} else {
			double VAR_2;
			if ((x <= -4.6992675325234154e-229)) {
				VAR_2 = (z * sqrt(0.3333333333333333));
			} else {
				double VAR_3;
				if ((x <= 4.9296672245653324e+135)) {
					VAR_3 = sqrt((0.3333333333333333 * fma(x, x, fma(y, y, (z * z)))));
				} else {
					VAR_3 = (x * sqrt(0.3333333333333333));
				}
				VAR_2 = VAR_3;
			}
			VAR_1 = VAR_2;
		}
		VAR = VAR_1;
	}
	return VAR;
}

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

Original37.5
Target25.2
Herbie26.9
\[\begin{array}{l} \mathbf{if}\;z \lt -6.3964793941097758 \cdot 10^{136}:\\ \;\;\;\;\frac{-z}{\sqrt{3}}\\ \mathbf{elif}\;z \lt 7.3202936944041821 \cdot 10^{117}:\\ \;\;\;\;\frac{\sqrt{\left(z \cdot z + x \cdot x\right) + y \cdot y}}{\sqrt{3}}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{0.333333333333333315} \cdot z\\ \end{array}\]

Derivation

  1. Split input into 4 regimes
  2. if x < -2.0469435943033968e+129

    1. Initial program 58.8

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

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

    if -2.0469435943033968e+129 < x < -5.1573652837714696e-105 or -4.6992675325234154e-229 < x < 4.9296672245653324e+135

    1. Initial program 28.5

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

      \[\leadsto \sqrt{\color{blue}{0.333333333333333315 \cdot {x}^{2} + \left(0.333333333333333315 \cdot {y}^{2} + 0.333333333333333315 \cdot {z}^{2}\right)}}\]
    3. Simplified28.5

      \[\leadsto \sqrt{\color{blue}{0.333333333333333315 \cdot \mathsf{fma}\left(x, x, \mathsf{fma}\left(y, y, z \cdot z\right)\right)}}\]

    if -5.1573652837714696e-105 < x < -4.6992675325234154e-229

    1. Initial program 29.5

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

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

    if 4.9296672245653324e+135 < x

    1. Initial program 59.5

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

      \[\leadsto \color{blue}{x \cdot \sqrt{0.333333333333333315}}\]
  3. Recombined 4 regimes into one program.
  4. Final simplification26.9

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -2.04694359430339678 \cdot 10^{129}:\\ \;\;\;\;-1 \cdot \left(x \cdot \sqrt{0.333333333333333315}\right)\\ \mathbf{elif}\;x \le -5.1573652837714696 \cdot 10^{-105}:\\ \;\;\;\;\sqrt{0.333333333333333315 \cdot \mathsf{fma}\left(x, x, \mathsf{fma}\left(y, y, z \cdot z\right)\right)}\\ \mathbf{elif}\;x \le -4.6992675325234154 \cdot 10^{-229}:\\ \;\;\;\;z \cdot \sqrt{0.333333333333333315}\\ \mathbf{elif}\;x \le 4.9296672245653324 \cdot 10^{135}:\\ \;\;\;\;\sqrt{0.333333333333333315 \cdot \mathsf{fma}\left(x, x, \mathsf{fma}\left(y, y, z \cdot z\right)\right)}\\ \mathbf{else}:\\ \;\;\;\;x \cdot \sqrt{0.333333333333333315}\\ \end{array}\]

Reproduce

herbie shell --seed 2020092 +o rules:numerics
(FPCore (x y z)
  :name "Data.Array.Repa.Algorithms.Pixel:doubleRmsOfRGB8 from repa-algorithms-3.4.0.1"
  :precision binary64

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

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