CPSC/MATH 402 - Computer Exercises
Log into the Linux system to do this exercise.
This handout and programs are on-line --
go to http://cs.roanoke.edu/~cpsc/Spring2004/CPSC402A and
follow the link.
Investigating Floating Point Representation and Arithmetic
Investigate the floating point representation on the
Linux system by doing the following:
- The program
floatRep.cc is a C++ program that
determines approximations of unit roundoff
(machine epsilon) for type float
and type double using two different techniques.
One is the technique described in Computer Problem 1.3 on page
44 of the text; the other is the alternate characterization of
machine epsilon described on page 20 (as the smallest positive
number epsilon such that fl(1 + epsilon) > 1). The program
FloatRep.java is a Java version of
the same thing.
Do the following:
- Save the programs to your directory (you can do this with
the File/Save As feature in the browser or copy and paste).
- Compile and run the C++ version. In case you forgot,
the commands are:
g++ floatRep.cc -o epsilon
to compile and put the executable in a file named epsilon.
Just type ./epsilon to run (you need the ./ to refer to
your current directory).
Alternately, use the command
g++ floatRep.cc
to compile then ./a.out to run.
- Study the output. Compare the different answers for the different
approximation techniques. How do they compare to theory (for IEEE
floating point representation)? NOTE: If you want a printed copy of
the output, redirect to a file then print the file. The
following commands do that if the name of the executable is epsilon
and the name of the file is eps.out:
./epsilon > eps.out
nenscript -2rG eps.out
- Now compile and run the Java version. The commands to do this
are as follows:
javac FloatRep.java -- compiles to bytecode
java FloatRep -- interprets/runs the bytecode
- Compare these results to those of the C++ program.
- Add to one of the programs above (you choose) code to determine
the smallest power of two that is stored
in both double and single precision (UFL). Print both the decimal
form of the power and the exponent.
- Add a calculation in the program (and print the result -- the
calculation can be in the print statement) that will result in NaN.
- Now add code to find the largest power of 2. (Or even better -
OFL -- See Computer Problem
1.2 on page 44)
- The program Problem19.java is part
(a) and (b) of Computer Problem 1.9 in the text (page 46).
- Save the program to your directory, compile and run it using the
values in part (c). How did it do?
- Do part (d) -- that is, modify the program so it gets accurate
results for x < 0. Don't get carried away -- there isn't much you
need to do!
HOMEWORK DUE Thursday, February, 2004:
- Answer questions (a) and (c) in Computer Problem 1.3, page 44.
- Determine from the results of your calculation of UFL
whether or not gradual underflow is used on this
system. Justify your answer by computing
theoretically what the smallest number would
be without subnormals and what the smallest
positive number would be with them.
(HINT: You need to use the info about IEEE Double precision
floating point representation.)
- What did you get for the largest positive double? How does
it compare to the theoretical value (based on the formula in the
book)?
Also hand in a copy of your program that computed UFL and the largest
positive double and the revised Problem19.java.