# Laboratory: Numeric Values

Number predicates used in this lab: `complex?`, `exact?`, `inexact?`, `number?`, `rational?`, and `real?`,

Other number procedures used in this lab: `denominator`, `numerator`, and `sqrt`.

You may want to refer to the reading on numbers before or while you work on this lab.

## Exercises

Start DrScheme.

### Exercise 1: Types of Numbers

Have DrScheme confirm that 3/4 is a rational number but not an integer and that the square root of -1 is a complex number but not a real number.

### Exercise 2: The Type of a Square Root

Confirm that the value DrScheme computes for `(sqrt 2)` is an inexact real that is also rational.

### Exercise 3: More Types of Numbers

As you've just seen, some kinds of numbers are subsets of other kinds of numbers. Determine the relationships between the various kinds of numbers.

### Exercise 4: A Large Number

Write a Scheme numeral for 1.507 times ten to the fifteenth power, as an exact number. Have Scheme evaluate the numeral.

### Exercise 5: Inexact Roots

a. Have DrScheme find the square of the square root of 2 and subtract 2 from the result.

b. Ideally, the difference should be 0; why isn't it?

c. How big is the difference?

d. Will you have the same problem if you start with 4? Why or why not?

### Exercise 6: Inexact Fractions

Write a Scheme numeral for one-third, as an inexact number. Have Scheme evaluate the numeral.

### Exercise 7: Other Integer Procedures

Scheme provides a number of numerical procedues that can produce integer results. We've already explored `expt`, `abs`, `+`, `-`, and `*`.

Here are some others. For each, try to figure (by experimentation, by discussing results with other students, and, eventually, by reading documentation) out how many parameters each procedure can take and what the procedure does. Make sure to try a variety of values for each procedure, including positive and negative, integer and real.

Warning: You may not be able to figure all of them out.

a. `quotient`

b. `remainder`

c. `modulo`

d. `max`

e. `min`

f. `numerator`

g. `denominator`

h. `gcd`

i. `lcm`

j. `floor`

k. `ceiling`

l. `truncate`

m. `round`

### Exercise 8: Exploring Rationals

Since you've found that DrScheme seems to represent every real number as a rational, it might be worth finding a way to see what that rational number is.

a. Determine the numerator and denominator of the rational representation of the square root of 2.

b. Determine the numerator and denominator of the rational representation of 1.5.

c. Determine the numerator and denominator of the rational representation of 1.2.

If you're puzzled by the last answer, you may want to read the notes on this problem.

### Exercise 9: Rounding, Revisited

For small numbers, the `exact->inexact` procedure produces lots and lots of digits after the decimal point. Figure out how to get just two digits after the decimal point. You may need to use multiplication, division, and some of the last procedures from the previous exercise.

You need not implement your algorithm; simply come up with one you think will work.

### Exercise 10: Other Numeric Predicates

We've already seen a variety of predicates (procedures that return true or false) that can be applied to numbers. These predicates include `exact?`, `integer?`, and `real?`.

By reading the Scheme documentation, identify other predicates that can be applied to numbers.

## Extra Work

If you finish early, you might

• Implement a working version of the algorithm from Exercise 9.
• Identify a fraction a/b such that `(numerator a/b)` is not the same as `(numerator #ia/b)`.

## Notes

### Notes on Exercise 7

When you get stuck on this problem, it's probably worth skimming through DrScheme's Help Desk. The numeric operations are documented in section 6.2.5 of the Revised(5) Report on the Algorithmic Language Scheme. (I have not yet put all of these procedures in the Glimmer Scheme Reference.

### Notes on Exercise 8

DrScheme seems to represent the fractional part of many numbers as the ratio of some number and 4503599627370496, which happens to be 252. (Most computers like powers of 2.)

## History

Wednesday, 31 January 2001 [Samuel A. Rebelsky]

Monday, 9 September 2002 [Samuel A. Rebelsky]

Thursday, 30 January 2003 [Samuel A. Rebelsky]

Tuesday, 9 September 2003 [Samuel A. Rebelsky]

Disclaimer: I usually create these pages on the fly, which means that I rarely proofread them and they may contain bad grammar and incorrect details. It also means that I tend to update them regularly (see the history for more details). Feel free to contact me with any suggestions for changes.

This document was generated by Siteweaver on Tue Dec 9 13:59:13 2003.
The source to the document was last modified on Tue Sep 9 12:23:51 2003.
This document may be found at `http://www.cs.grinnell.edu/~rebelsky/Courses/CS151/2003F/Labs/numbers.html`.

You may wish to validate this document's HTML ; ; Check with Bobby

Samuel A. Rebelsky, rebelsky@grinnell.edu