Description
1. (a) In IEEE arithmetic how many double precision numbers are there between any two adjacent
nonzero single precision numbers? Justify your response.
(b) What is the largest integer p such that all integers in the interval [−p, p] are exactly representable
in IEEE double precision arithmetic? What is the corresponding p for IEEE single precision
arithmetic? Justify your responses.
2. (a) The following C program:
#include <stdio.h>
int main (void)
{
double a, b;
for (a = 0.1; a <= 0.5; a += 0.1)
printf(“a = %e\n”, a);
for (b = 1.1; b <= 1.5; b += 0.1)
printf(“b = %e\n”, b);
return 0;
}
outputs five values of a and four values of b. Explain why the two loops do not produce the
same number of lines of output.
(Ask for assistance if you do not know C. The programming language is not the issue here.)
(b) Suppose that you are writing a program to run on a computer that supports IEEE floating
point arithmetic, have declared and initialize a floating point variable named x, and need to
determine 10% of the value stored in x. You need to decide between using the expression
0.1 * x or x / 10.0. Which of these two expressions would you recommend using if accuracy
of the final result is your biggest concern? Explain.
Dept. of Computer Science, University of Toronto, St. George Campus Page 1 of 2
CSC 336 H1F Assignment One Fall 2015
3. You know that cos( 2mπ ) = 1 for every integer m. Using a programming language of your choice that
uses IEEE fixed precision floating-point arithmetic, write a program that calculates cos( 2*m*pi )
for m = 10.0
k
, k = 0, 1, 2, . . . , 20, where pi is either your language’s builtin approximation to π or
4.0*arctan(1.0). Present the results of your calculations in a formatted table, with column headings
for the values of k, 2*m*pi, and cos( 2*m*pi ). Use a “scientific notation” to present the values of
2*m*pi and cos( 2*m*pi ), giving 15 significant figures for both 2*m*pi and cos( 2*m*pi ).
Carefully explain why you do not always compute cos(2*m*pi) ≈ 1.0 and why the approximations
change significantly for larger values of k .
4. Consider the problem of evaluating the function f(x) for any x ∈ [−π/2, +π/2], where
f(x) =
1 − cos(x)
sin(x)
, x ∈ [−π/2, 0) ∪ (0, +π/2]
0, x = 0.
(a) Show why one can expect to be able to write a computer program that uses floating-point
arithmetic to accurately evaluate f(x) at any x ∈ [−π/2, +π/2].
(b) Derive an accurate algorithm for evaluating f(x) and explain why you think that accurate
results will be computed. Make use of standard math library functions like sin() and cos()
when expressing your algorithm.
If you have questions or encounter any difficulties, post a description of the issue on the Piazza course
forum.
Dept. of Computer Science, University of Toronto, St. George Campus Page 2 of 2