Alternative 1 | |
---|---|
Error | 12.3 |
Cost | 6660 |
\[\begin{array}{l}
\mathbf{if}\;z \leq 6.2 \cdot 10^{-141}:\\
\;\;\;\;\mathsf{hypot}\left(y, x\right)\\
\mathbf{else}:\\
\;\;\;\;z + 0.5 \cdot \frac{y \cdot y}{z}\\
\end{array}
\]
(FPCore (x y z) :precision binary64 (sqrt (+ (+ (* x x) (* y y)) (* z z))))
(FPCore (x y z) :precision binary64 (hypot z x))
double code(double x, double y, double z) { return sqrt((((x * x) + (y * y)) + (z * z))); }
double code(double x, double y, double z) { return hypot(z, x); }
public static double code(double x, double y, double z) { return Math.sqrt((((x * x) + (y * y)) + (z * z))); }
public static double code(double x, double y, double z) { return Math.hypot(z, x); }
def code(x, y, z): return math.sqrt((((x * x) + (y * y)) + (z * z)))
def code(x, y, z): return math.hypot(z, x)
function code(x, y, z) return sqrt(Float64(Float64(Float64(x * x) + Float64(y * y)) + Float64(z * z))) end
function code(x, y, z) return hypot(z, x) end
function tmp = code(x, y, z) tmp = sqrt((((x * x) + (y * y)) + (z * z))); end
function tmp = code(x, y, z) tmp = hypot(z, x); end
code[x_, y_, z_] := N[Sqrt[N[(N[(N[(x * x), $MachinePrecision] + N[(y * y), $MachinePrecision]), $MachinePrecision] + N[(z * z), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
code[x_, y_, z_] := N[Sqrt[z ^ 2 + x ^ 2], $MachinePrecision]
\sqrt{\left(x \cdot x + y \cdot y\right) + z \cdot z}
\mathsf{hypot}\left(z, x\right)
Results
Initial program 7.3
Simplified7.3
[Start]7.3 | \[ \sqrt{\left(x \cdot x + y \cdot y\right) + z \cdot z}
\] |
---|---|
associate-+l+ [=>]7.3 | \[ \sqrt{\color{blue}{x \cdot x + \left(y \cdot y + z \cdot z\right)}}
\] |
fma-def [=>]7.3 | \[ \sqrt{\color{blue}{\mathsf{fma}\left(x, x, y \cdot y + z \cdot z\right)}}
\] |
fma-def [=>]7.3 | \[ \sqrt{\mathsf{fma}\left(x, x, \color{blue}{\mathsf{fma}\left(y, y, z \cdot z\right)}\right)}
\] |
Taylor expanded in y around 0 8.1
Simplified1.0
[Start]8.1 | \[ \sqrt{{z}^{2} + {x}^{2}}
\] |
---|---|
unpow2 [=>]8.1 | \[ \sqrt{\color{blue}{z \cdot z} + {x}^{2}}
\] |
unpow2 [=>]8.1 | \[ \sqrt{z \cdot z + \color{blue}{x \cdot x}}
\] |
hypot-def [=>]1.0 | \[ \color{blue}{\mathsf{hypot}\left(z, x\right)}
\] |
Final simplification1.0
Alternative 1 | |
---|---|
Error | 12.3 |
Cost | 6660 |
Alternative 2 | |
---|---|
Error | 12.9 |
Cost | 708 |
Alternative 3 | |
---|---|
Error | 12.7 |
Cost | 708 |
Alternative 4 | |
---|---|
Error | 13.1 |
Cost | 260 |
Alternative 5 | |
---|---|
Error | 30.9 |
Cost | 64 |
herbie shell --seed 1
(FPCore (x y z)
:name "sqrt(x*x + y*y + z*z)"
:precision binary64
:pre (and (and (and (<= -10.0 x) (<= x 10.0)) (and (<= -10.0 y) (<= y 10.0))) (and (<= -10.0 z) (<= z 10.0)))
(sqrt (+ (+ (* x x) (* y y)) (* z z))))