Real numbers and numerical precision: Difference between revisions
No edit summary |
|||
Line 25: | Line 25: | ||
== Example: Loss of precision due to cancellations of nearly equal numbers == | == Example: Loss of precision due to cancellations of nearly equal numbers == | ||
x^ | Assume that we can represent a floating number with a precision of 5 digits only to the right of the decimal point. This is nothing but a mere choice of ours, but mimicks the way numbers are represented in the machine. Then we try to evaluate the function | ||
<math> f(x) = \frac{1−\cos(x)}{\sin x} </math> | |||
, | |||
for small values of x. Note that we can also rewrite this expression by multiplying the denominator and numerator with <math> 1+cos(x) </math> to obtain the equivalent expression | |||
<math> f(x) = \frac{\sin x}{1+\cos x}. | |||
If we now choose x = 0.006 (in radians) our choice of precision results in <math> \sin(0.007) \approx 0.59999×10^{−2} </math>. | |||
== Example: Loss of precision and round-off errors in algorithms for computing \exp(-x) == | == Example: Loss of precision and round-off errors in algorithms for computing \exp(-x) == | ||
== Theory: Representation of real numbers in digital computers == | == Theory: Representation of real numbers in digital computers == |
Revision as of 14:41, 10 January 2012
Overview
An important aspect of computational physics is the numerical precision involved. To design a good algorithm, one needs to have a basic understanding of propagation of inaccuracies and errors involved in calculations. There is no magic recipe for dealing with underflow, overflow, accumulation of errors and loss of precision, and only a careful analysis of the functions involved can save one from serious problems.
Since we are interested in the precision of the numerical calculus, we need to understand how computers represent real and integer numbers. Most computers deal with real numbers in the binary system, or octal and hexadecimal, in contrast to the decimal system that we humans prefer to use. The binary system uses 2 as the base, in much the same way that the decimal system uses 10. Since the typical computer communicates with us in the decimal system, but works internally in e.g., the binary system, conversion procedures must be executed by the computer, and these conversions involve hopefully only small roundoff errors
Computers are also not able to operate using real numbers expressed with more than a fixed number of digits, and the set of values possible is only a subset of the mathematical integers or real numbers. The so-called word length we reserve for a given number places a restriction on the precision with which a given number is represented. This means in turn, that for example floating numbers are always rounded to a machine dependent precision, typically with 6-15 leading digits to the right of the decimal point. Furthermore, each such set of values has a processor-dependent smallest negative and a largest positive value. Why do we at all care about rounding and machine precision?
Example: Loss of precision due to cancellations of nearly equal numbers
Assume that we can represent a floating number with a precision of 5 digits only to the right of the decimal point. This is nothing but a mere choice of ours, but mimicks the way numbers are represented in the machine. Then we try to evaluate the function
Failed to parse (syntax error): {\displaystyle f(x) = \frac{1−\cos(x)}{\sin x} } , for small values of x. Note that we can also rewrite this expression by multiplying the denominator and numerator with to obtain the equivalent expression
Failed to parse (syntax error): {\displaystyle f(x) = \frac{\sin x}{1+\cos x}. If we now choose x = 0.006 (in radians) our choice of precision results in <math> \sin(0.007) \approx 0.59999×10^{−2} } .