Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I was reading the following article:

Polynomial interpolation of GPS satellite coordinates, Milan Horemuz and Johan Vium Andersson 2006

and it states the following:

"The estimation procedure of the ai coefficients is done with the Matlab function polyfit, which estimates the coefficients in a least squares sense. To improve the numerical precision, the dataset p is normalized by centering it at a zero mean; by subtracting its mean value p; and scaling it to a unit standard deviation by dividing each observation with the standard deviation σp as follows..."

My question is how does the value normalization improves the numerical precision of computational operations?

share|improve this question
    
Before your latest edit, the quote said "normalized around zero". I believe that's the answer: floating point around zero can be represented with much higher resolution. –  Andres F. Sep 23 '13 at 14:55
2  
it allows the mean to be closer to 0 and as such lets the (absolute) accuracy of the intermediate results be much higher in floating point representation –  ratchet freak Sep 23 '13 at 14:56
    
@Andres F. Yes, I had that written. I've updated again the question. –  RandomGuy Sep 23 '13 at 15:05

1 Answer 1

up vote 15 down vote accepted

Imagine for a moment that the quantity you are interested in has a value in the range 42.0 - 42.999.

Imagine further that you want as much precision as possible.

As it stands, you are spending a chunk of your available bits representing the value 42, and that leaves fewer bits available to represent the 0.000 - 0.999, which in some sense is what you are really interested in.

By subtracting out the constant 42, you can now spend all of your bits representing the 0.000 - 0.999 delta, that you are really interested in.

Now, suppose you don't actually know that the values are all centered around 42.5, but you do know that they are all centered around SOME mean value. You can calculate that mean, subtract it out, and use all your bits to represent the delta from the mean.

This is the concept behind normalization about a mean. You spend your bits representing the quantity you are interested in, which is the delta from the mean, and you don't waste bits representing the mean itself.

share|improve this answer
    
Thanks for the nice explanation. If at the end of all the operations with the normalized values I convert back the final result to the original scale, it will still to be more precise than perform all operations without normalization (due the reasons you mentioned). I am right? –  RandomGuy Sep 23 '13 at 16:02
3  
@RandomGuy: Yes. Floating point operations tend to accumulate some 'garbage' in the low-order bits (deviations from the ideal value if you had unlimited storage). By normalizing, you effectively add a few bits additional accuracy to your floating point type that you use to offset the accumulation of the garbage. –  Bart van Ingen Schenau Sep 23 '13 at 17:30

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.