I was working in my project when I was struck by the question of whether it would be necessary, or at least cautious, prevent overflow and underflow in the calculation of these two distances.
I remembered that there is an implementation of the calculation of the hypotenuse to prevent this. Most languages implementers, and is known for Hypot
The calculation of the Euclidean distance remains the same "pattern" and I thought that if Hypot()
controls the overflow and underflow should also beware of the Euclidean distance. I've disappointed to note that the language we use, and others, do not control the overflow and underflow for calculating distance. Will not worth spend this "additional effort"?
I did a searchs and came to a question in Math.StackExchange
There is no definitive answer to this issue and is somewhat old. The first thing I wondered is: Will okay? I think that yes, seeing that is a generalization of the same procedure that performs Hypot()
.
I decided to extrapolate this concept to the Mahalanobis distance. The original is as follows:
$$D_M(X,Y,L) = \sqrt{\sum_{i=1}^{n}\left(\frac{X_i-Y_i}{L_i}\right)^2}$$
Since $L$ is the vector of eigenvalues.
And my proposal is this:
$$D_M(X,Y,L) = C\sqrt{\sum_{i=1}^{n}\left(\frac{X_i-Y_i}{L_i }\frac{1}{C}\right)^2}$$
That is the same to:
$$D_M(X,Y,L) = C\sqrt{\sum_{i=1}^{n}\left(\frac{X_i-Y_i}{L_i C}\right)^2}$$
And $C$ is the max value from the $|(X_i-Y_i)/L_i|$:
$$C = \max_{i}\left(|\frac{X_i-Y_i}{L_i}|\right)$$
Is it okay?