\sqrt{\frac{\left(x \cdot x + y \cdot y\right) + z \cdot z}{3}}\begin{array}{l}
\mathbf{if}\;x \le -7.060606248743601504632612473600212365221 \cdot 10^{50}:\\
\;\;\;\;\sqrt{0.3333333333333333148296162562473909929395} \cdot \left(-x\right)\\
\mathbf{elif}\;x \le 7.898403675517637649655314019741343921642 \cdot 10^{123}:\\
\;\;\;\;\sqrt{\frac{z \cdot z + \left(y \cdot y + x \cdot x\right)}{3}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt{0.3333333333333333148296162562473909929395} \cdot x\\
\end{array}double f(double x, double y, double z) {
double r567966 = x;
double r567967 = r567966 * r567966;
double r567968 = y;
double r567969 = r567968 * r567968;
double r567970 = r567967 + r567969;
double r567971 = z;
double r567972 = r567971 * r567971;
double r567973 = r567970 + r567972;
double r567974 = 3.0;
double r567975 = r567973 / r567974;
double r567976 = sqrt(r567975);
return r567976;
}
double f(double x, double y, double z) {
double r567977 = x;
double r567978 = -7.0606062487436015e+50;
bool r567979 = r567977 <= r567978;
double r567980 = 0.3333333333333333;
double r567981 = sqrt(r567980);
double r567982 = -r567977;
double r567983 = r567981 * r567982;
double r567984 = 7.898403675517638e+123;
bool r567985 = r567977 <= r567984;
double r567986 = z;
double r567987 = r567986 * r567986;
double r567988 = y;
double r567989 = r567988 * r567988;
double r567990 = r567977 * r567977;
double r567991 = r567989 + r567990;
double r567992 = r567987 + r567991;
double r567993 = 3.0;
double r567994 = r567992 / r567993;
double r567995 = sqrt(r567994);
double r567996 = r567981 * r567977;
double r567997 = r567985 ? r567995 : r567996;
double r567998 = r567979 ? r567983 : r567997;
return r567998;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 37.2 |
|---|---|
| Target | 25.0 |
| Herbie | 25.9 |
if x < -7.0606062487436015e+50Initial program 47.6
Taylor expanded around -inf 22.0
Simplified22.0
if -7.0606062487436015e+50 < x < 7.898403675517638e+123Initial program 29.2
if 7.898403675517638e+123 < x Initial program 58.2
rmApplied *-un-lft-identity58.2
Applied add-sqr-sqrt58.2
Applied times-frac58.2
Simplified58.2
Simplified58.2
Taylor expanded around 0 16.7
Final simplification25.9
herbie shell --seed 2019179
(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)))