18 CHAPTER 2. INTRODUCTION TO C/C++ AND FORTRAN 90/95
PROGRAM integer_exp
IMPLICIT NONE
INTEGER (KIND=4) : : int1 , int2 , i nt3
! This i s the begin of a comment l i ne in Fortran 90
! Now we read from screen the variable in t2
WRITE( , ) ’ Read in the number to be exponentiated ’
READ( , ) int2
in t1 = int2 30
WRITE( , ) ’ int2 30+ int2 30 ’ , int1 + int 1
in t3 =int1 1
WRITE( , ) ’ int2 30+ int2 30 1 ’ , i nt1 +int3
WRITE( , ) ’ int2 31 1 ’ , 2 int1 1
END PROGRAM integer_exp
2.2 Real numbers and numerical precision
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 e.g., 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? The best way is to consider
a simple example first. You should always keep in mind that the machine can only represent
a floating number to a given precision. Let us in the following example assume that we can
represent a floating number with a precision of 5 digits only to the right of the decimal point.