Calculations Homework

advertisement
Calculation Homework
Exercise 1: copy and paste the code to see what the result is
Factorial = Big Numbers
The first calculation, 1*2*3*4*5*6*7*8*9 is called factorial, abbreviated 9.
Factorial is useful in probability (e.g. gambling and insurance) as well as
physics.
These factorial numbers get very big very fast, so it's useful to have a computer
that does the calculations - they are too difficult by hand.
Question: Can the computer continue to really big factorials? For example,
can it do 99?
Investigation
1. Change the first command to calculate 15, e.g. 1*2*3...*14*15.
Run the program and write down the result.
The result would be 2004310016
2. Change the program to calculate 20, e.g. 1*2*3*4...*19*20.
Run the program and write down the result.
There is obviously something wrong here.
The result would be -2102132736
3. Now take a pocket calculator, or use the calculator built in to your
computer, or use Google ...
and get a more believable answer for 20! . Write it down.
The result would be 2329020080000000000
Explanation
Find out how numbers are stored in binary in a computer's memory.
Binary code in a computer is 0 and 1 as computers use electricity which is “ON”
and “OFF”
Calculate the maximum value that can be stored in 32 bits.
The maximum value of binary columns would be 5, but the biggest
individual number this column would have would be 16.
Hence determine the maximum factorial value that can be correctly
calculated by this program, since Java stores integer values in 32 bits.
(2^32) -1 is the largest integer number is the maximum value that can be
stored.
Describe what happens when the calculation gets too big, e.g. overflows.
An overflow is the numerical value it too big to be represented within the storage
available. As a result of overflow, the least important representable bits are stored
and this is called wrap. Another result in processors like the GPU and the DSP, the
result of overflow would be saturation once the maximum value is reached.
Division Problems
Division is a difficult arithmetic operation, so people make frequent mistakes.
The computer also makes mistakes, but for a different reason.
Question: Why (and when) does division give incorrect answers?
Investigation
Find out what the computer prints for each of the following calculations write the results in your notebook.






3+4/5 The result from the program is 3
(3+4)/5 The result from the program is 1
3+4/5.0 The result from the program is 3.8
(3+4)/5.0 The result from the program is 1.4
3.0/4.0/5.0 The result from the program is 0.15
3.0/(4.0/5.0) The result from the program is 3.75
Explanation
Java treats integers (whole numbers) differently than floating point (decimal)
numbers.
When dividing integers, Java does it like people would divide up a bunch of
coconuts.
7 / 3 ==> divide 7 coconuts among 3 people. We could give 2 coconuts to each
person, but there would still be 1 coconut left over. It's pretty difficult to divide
a coconut into pieces, so we don't know what to do. The extra probably doesn't
go anywhere, just gets left out.
So 7 / 3 ==> 2. That is how Java does integer division.
When dividing decimals, Java does it correctly, giving a correct decimal
answer.
So 7.0 / 3.0 ==> 2.3333333.
And parentheses are necessary if we want addition to be done before division.
Java follows the normal math rules for order of operations.
So explain why 1/2 + 1/3 + 1/6 prints 0.
It prints 0 because it doesn’t have a complete number for a result, thus
just leaves it 0. However, if we have the same equation with .0 after each
number, then the answer will be 1.0. Thus, it finds 0 because it doesn’t
work it out correctly without the .0
Powers with Math.pow(b , e)
3^4 = 81 - this can be calculated with Math.pow(3,4);
Investigation
Design your own experiments to investigate the following:

Find out whether the Math.pow function has the same problems as
division. That is, does it give different answers with integers than with
decimals?
Math.pow function doesn’t suffer with the same problem because
even though you give integers it still gives a result of a decimal.
Also, when the answer is a decimal, it shows the whole number.

Find out whether the Math.pow function can suffer an overflow error e.g. what happens when the answer is very big.
Math.pow does contain an overflow error: when a “massive” number is
inserted, the result comes out as ‘Infinitive’. This means that it cannot
show the whole number, therefore having an overflow error.

Find out whether Math.pow has any specific limitations.
For example:
- can we use negative numbers in for b and e ?
Negative numbers can be used:
- can we use small decimals (0.001) for b and e?
Small decimals can also be used:
- can we use zeroes for b and e?
- What is Math.pow(0 , 0) ?
Zeroes can be used.

Find out how Math.pow can be used to calculate square-roots.
The result would be as follows:
Explanations
For explanations, consult the Processing Help Reference, or consult a Java
textbook.
Processing Help Reference
Practice
1. Calculate the number of hours in one year.
2. Calculate 1/2 + 1/3 + 1/4 + ... + 1/9.
3. By guessing and calculating, find a solution to this problem:
X * X * X * X = 100. You only need to get an approximate answer with 2
decimal places correct.
4. A computer works at a speed of 2 GigaHertz - that means that it can do
2 BILLION (2 000 000 000) calculations per second.
Calculate the number of calculations it can do in 1 minute.
The answer is too big of a number, thus processing had an overflow
error
5. Write a command that CORRECTLY calculates a value for 20!
Download