\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3}}\begin{array}{l}
\mathbf{if}\;x \le -4.24117253240271209 \cdot 10^{119}:\\
\;\;\;\;-1 \cdot \frac{x}{\sqrt{3}}\\
\mathbf{elif}\;x \le 6.6019422836665007 \cdot 10^{109}:\\
\;\;\;\;\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 f(double x, double y, double z) {
double r946622 = x;
double r946623 = r946622 * r946622;
double r946624 = y;
double r946625 = r946624 * r946624;
double r946626 = r946623 + r946625;
double r946627 = z;
double r946628 = r946627 * r946627;
double r946629 = r946626 + r946628;
double r946630 = 3.0;
double r946631 = r946629 / r946630;
double r946632 = sqrt(r946631);
return r946632;
}
double f(double x, double y, double z) {
double r946633 = x;
double r946634 = -4.241172532402712e+119;
bool r946635 = r946633 <= r946634;
double r946636 = -1.0;
double r946637 = 3.0;
double r946638 = sqrt(r946637);
double r946639 = r946633 / r946638;
double r946640 = r946636 * r946639;
double r946641 = 6.601942283666501e+109;
bool r946642 = r946633 <= r946641;
double r946643 = 0.3333333333333333;
double r946644 = y;
double r946645 = z;
double r946646 = r946645 * r946645;
double r946647 = fma(r946644, r946644, r946646);
double r946648 = fma(r946633, r946633, r946647);
double r946649 = r946643 * r946648;
double r946650 = sqrt(r946649);
double r946651 = sqrt(r946643);
double r946652 = r946633 * r946651;
double r946653 = r946642 ? r946650 : r946652;
double r946654 = r946635 ? r946640 : r946653;
return r946654;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 37.8 |
|---|---|
| Target | 25.5 |
| Herbie | 25.7 |
if x < -4.241172532402712e+119Initial program 56.8
rmApplied add-sqr-sqrt56.8
Applied add-sqr-sqrt56.8
Applied times-frac56.8
Taylor expanded around -inf 18.1
if -4.241172532402712e+119 < x < 6.601942283666501e+109Initial program 29.3
Taylor expanded around 0 29.3
Simplified29.3
if 6.601942283666501e+109 < x Initial program 55.9
Taylor expanded around inf 17.7
Final simplification25.7
herbie shell --seed 2020060 +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)))