Lab 2: Experiment 3


The Program

For this experiment, you will write code for real-number variables.

The keyword for the real-number data type in C++ is double. (There's also float, but it's half as precise. Also, by default, real numbers will be stored in double precision in memory.)

The difference between a real number and an integer is a decimal point: real numbers have a decimal point, integers do not.

Real Number Declarations

Consider the initialization of our integer variables in the original program:

int count = 3,
    number = 5;

Write declarations for double variables length and width, initializing them to 3.1 and 5.667, respectively. Do not get rid of any code. Compile and execute your code.

Question #2.3.1: What declarations did you add to the program?

You won't see any change in the execution because these declarations and initializations only allocate memory locations for these variables and store the specified values in them.

Once you can compile and execute the code without problems, add a statement to display length and width. The original program had this statement to print count and number:

   cout << "count is " << count << "\n"
        << "number is " << number << endl;
Your new statement for length and width should look quite similar, replacing the integer variables with the real-number variables and changing the labels appropriately.

Now compile and execute the program. Make sure it prints the proper labels and values for the variables.

Question #2.3.2: What is the output statement you just added to your program?

Now, let's experiment with these declarations.

Real-Number Initialization

In the integer experiment, we tried initializing an integer variable with various types. Let's try this again for the double variables you just added to your program.

For the following questions, "I didn't get an error message or warning" might be perfectly acceptible.

Initialize length to an integer and compile your program.

Question #2.3.3: What is the first error or warning message that the compiler gives you? If it does compile (with or without warnings), what output is produced when the program is executed?

Initialize length to a character and compile your program.

Question #2.3.4: What is the first error or warning message that the compiler gives you? If it does compile (with or without warnings), what output is produced when the program is executed?

Initialize length to a string and compile your program.

Question #2.3.5: What is the first error or warning message that the compiler gives you? If it does compile (with or without warnings), what output is produced when the program is executed?

Initialize length to cin and compile your program.

Question #2.3.6: What is the first error or warning message that the compiler gives you? If it does compile (with or without warnings), what output is produced when the program is executed?

Observations

You probably didn't get any warning or error for initializing length to be an integer. Keep in mind that a real number, a double, may have a decimal point in it. It's not required to. Any number without a decimal point can easily have one added: for example, 3 becomes 3.0. C++ compilers will (implicitly) supply this decimal point.

In the previous experiment, however, the compiler most likely complained when you tried initializing an int variable with a floating-point number. This is because an int cannot have a decimal point it in. The compatibility between these two types is one-way.

Real-Number Literals

Integers are easy to write: just a bunch of digits, possibly with a negative sign on the front.

Simple real numbers, known as fixed-point real literals, are also easy to write: write some digits and put in (at most) one decimal point. However, if you want to represent really large or really small numbers, we'd need a simpler notation. For example, chemists measure amounts in moles. One mole is the equivalent of approximately 602 million trillion atoms — that's 602 followed by 21 zeros!

A floating-point real literal uses scientific notation (also known as exponential notation or floating-point notation) to represent these very large or very small numbers. Scientific notation uses 10 to a power to shift the decimal point in a number. So, for example, the number 602 million trillion can be written 6.02 x 1023 in scientific notation, which represents 6.02 multiplied by 10 to the 23th power. This effectively shifts the decimal point over 23 positions to the right, adding zeros as needed.

However, C++ does not provide superscript notation; instead, it uses a short hand notation: the letter e or E for "exponent." which is followed by the exponent. Thus, 602 million trillion can be written as 6.02e23 or 6.02E23 or .602e24 or 60.2E22 or . . . in C++.

Change your program so that length is initialized to 6.02e23 and width is initialized to 60.2E22.

Question #2.3.7: Predict: what will your program display when you execute it?

Compile and execute your program to test your prediction.

Question #2.3.8: What did your program actually display? Did this agree with your prediction?

Negative real numbers and negative exponents are also allowed — for example, -1.23456E3 for -1234.56, 1.23456E-3 for 0.00123456, and -1.23456E-3 for -0.00123456.


Back to the Lab Exercise  |  Forward to the Next Experiment


Report errors to Larry Nyhoff (nyhl@cs.calvin.edu)