\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3}}\begin{array}{l}
\mathbf{if}\;x \le -1.279231778552234340489453953388016181689 \cdot 10^{128}:\\
\;\;\;\;-x \cdot \sqrt{0.3333333333333333148296162562473909929395}\\
\mathbf{elif}\;x \le 2.128703798252542087511374205356575227021 \cdot 10^{74}:\\
\;\;\;\;\frac{\sqrt{\mathsf{fma}\left(z, z, \mathsf{fma}\left(x, x, {y}^{2}\right)\right)}}{\sqrt{3}}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \sqrt{0.3333333333333333148296162562473909929395}\\
\end{array}double f(double x, double y, double z) {
double r1007607 = x;
double r1007608 = r1007607 * r1007607;
double r1007609 = y;
double r1007610 = r1007609 * r1007609;
double r1007611 = r1007608 + r1007610;
double r1007612 = z;
double r1007613 = r1007612 * r1007612;
double r1007614 = r1007611 + r1007613;
double r1007615 = 3.0;
double r1007616 = r1007614 / r1007615;
double r1007617 = sqrt(r1007616);
return r1007617;
}
double f(double x, double y, double z) {
double r1007618 = x;
double r1007619 = -1.2792317785522343e+128;
bool r1007620 = r1007618 <= r1007619;
double r1007621 = 0.3333333333333333;
double r1007622 = sqrt(r1007621);
double r1007623 = r1007618 * r1007622;
double r1007624 = -r1007623;
double r1007625 = 2.128703798252542e+74;
bool r1007626 = r1007618 <= r1007625;
double r1007627 = z;
double r1007628 = y;
double r1007629 = 2.0;
double r1007630 = pow(r1007628, r1007629);
double r1007631 = fma(r1007618, r1007618, r1007630);
double r1007632 = fma(r1007627, r1007627, r1007631);
double r1007633 = sqrt(r1007632);
double r1007634 = 3.0;
double r1007635 = sqrt(r1007634);
double r1007636 = r1007633 / r1007635;
double r1007637 = r1007626 ? r1007636 : r1007623;
double r1007638 = r1007620 ? r1007624 : r1007637;
return r1007638;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 37.9 |
|---|---|
| Target | 25.5 |
| Herbie | 25.7 |
if x < -1.2792317785522343e+128Initial program 59.3
Taylor expanded around -inf 16.3
Simplified16.3
if -1.2792317785522343e+128 < x < 2.128703798252542e+74Initial program 29.2
rmApplied sqrt-div29.3
Simplified29.3
if 2.128703798252542e+74 < x Initial program 52.2
Taylor expanded around inf 20.0
Final simplification25.7
herbie shell --seed 2019351 +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)))