The hypot
function in matlab purports to be more numerically stable at computing the hypotenuse of a (right-)triangle in 2D. The example the help hypot
gives is:
a = 3*[1e300 1e-300];
b = 4*[1e300 1e-300];
c1 = sqrt(a.^2 + b.^2)
c2 = hypot(a,b)
where you see as output:
c1 =
Inf 0
and
c2 =
5e+300 5e-300
this is a compiled built-in function so you can't just open hypot
to find out what its doing. It might just be pre-dividing by the maximum absolute value. There's probably a better reference for this, but I found it in: "Vector length and normalization difficulties" by Mike Day.
Continuing this example:
m = max(abs([a;b]))
c3 = m.*sqrt((a./m).^2 + (b./m).^2)
produces
c3 =
5e+300 5e-300
While matlab's hypot only accepts two inputs, pre-dividing by the maximum obviously extends to any dimension.