2.89 Floating-Point IV
★
Problem:
We are running programs on a machine where values of type int
have a 32-bit two's-complement representation. Values of type float
use the 32-bit IEEE format, and values of type double
use the 64-bit IEEE format.
We generate arbitrary integer values x
, y
, and z
, and convert them to values of type double
as follows:
For each of the following C expressions, you are to indicate whether or not the expression always yields 1. If it always yields 1, describe the underlying mathematical principles. Otherwise, give an example of arguments that make it yield 0. Note that you cannot use an IA32 machine running gcc to test your answers, since it would use the 80-bit extended-precision representation for both float and double.
A. (float) x ==(float) dx
True
B. dx - dy == (double) (x-y)
False, when y=INT_MIN
C. (dx + dy) + dz == dx + (dy + dz)
True
D. (dx * dy) * dz == dx * (dy * dz)
False
E. dx / dx == dz /dz
False, when dx=0 and dz!=0
Last updated