|
|
|
Two of the most significant advances in computing were made by Charles Babbage, a British mathematician born in 1792 – his difference engine and his analytical engine. Like other mathematicians of his time, Babbage had to perform all calculations by hand and sometimes he had to laboriously correct errors in published mathematical tables. Living in the age of steam, it was quite natural that Babbage asked himself whether mechanical means could be applied to arithmetic calculations. Babbage wrote papers on his ideas for mechanical calculators and applied to the British Government for funds to work on his machines. He received what was probably the first government grant for computer research. Unfortunately, Babbage didn’t actually build his calculating machine (i.e., the difference engine), although he and his engineer, Clement, constructed a working model of part of it between 1828 and 1833. A portion of Babbage’s difference engine Babbage’s difference engine project was cancelled in 1842 because of increasing costs. In 1853 George Scheutz in Sweden succeeded in constructing a working difference engine using 15-digit arithmetic and 4th-order differences. Like Babbage, Scheutz’s work was government financed. In 1991 a team at the Science Museum in London used modern construction techniques to build Babbage’s difference engine. It worked. The difference engine mechanized the calculation of polynomial functions and automatically printed the result. It was a complex array of interconnected gears and linkages that performed addition and subtraction rather like Pascal’s mechanical adder. However, it was a calculator rather than a computer because it could carry out only a set of predetermined operations. Babbage’s difference engine employed finite differences to calculate polynomial functions. Remember that trigonometric functions can be expressed as polynomials in the form a0x + a1x1 + a2x2 + … that the difference engine can evaluate automatically. The table below demonstrates how you can use the method of finite differences to create a table of squares without having to use multiplication. The first column in the table contains the natural integers 1, 2, 3, ... The second column contains the squares of these integers (i.e., 1, 4, 9, ...). Column 3 contains the first difference between successive pairs of numbers in column 2; for example, the first value is 4 - 1 = 3; the second value is 9 - 4 = 5, and so on. The final column is the second difference between successive pairs of first differences. As you can see, the second difference is always 2. Suppose we want to calculate the value of 82 using finite differences. We use the table in reverse by starting with the second difference and working back to the result. If the second difference is 2, the next first difference (after 72) is 13 + 2 = 15. Therefore, the value of 82 is the value of 72 plus the first difference; that is 49 + 15 = 64. We have generated 82 without using multiplication. This technique can be extended to evaluate other mathematical functions.
The use of finite differences to calculate squares Charles Babbage went on to design the analytical engine that was to be capable of performing any mathematical operation automatically. This truly remarkable and entirely mechanical device was nothing less than a general-purpose computer that could be programmed. The analytical engine included many of the elements associated with a modern electronic computer—an arithmetic processing unit that carries out all the calculations, a memory that stores data, and input and output devices. Unfortunately, the sheer scale of the analytical engine rendered its construction impossible. However, it is not unreasonable to call Babbage the father of the computer because his machine incorporated many of the intellectual concepts at the heart of the computer. Babbage envisaged that his analytical engine would be controlled by punched cards similar to those used to control the operation of the Jacquard loom. Two types of punched card were required. Operation cards specified the sequence of operations to be carried out by the analytical engine and variable cards specified the locations in store of inputs and outputs. One of Babbage's contributions to computing was the realization that it is better to construct one arithmetic unit and share it between other parts of the difference engine than to construct multiple arithmetic units. The part of the analytical engine that performed the calculations was the “mill” (now called the ALU) and the part that held information was called the “store”]. A key, if not the key, element of the computer is its ability to make a decision based on the outcome of a previous operation; for example, the action IF x > 4 THEN y = 3 represents such a conditional action because the value 3 is assigned to y only if x is greater than 4. Babbage described the conditional operation that was to be implemented by testing the sign of a number and then performing one of two operations depending on whether it was positive or negative. Because Babbage’s analytical engine used separate punched card stores for data and instructions, it lacked one of the principal features of modern computers – the ability of a program to operate on its own code. However, Babbage’s analytical engine incorporated more computer-like features than some of the machines in the 1940s that are credited as the first computers. One of Babbage’s collaborators was Ada Gordon, a mathematician who became interested in the analytical engine when she translated a paper on it from French to English. When Babbage discovered the paper he asked her to expand the paper. She added approximately 40 pages of notes about the machine and provided examples of how the proposed Analytical Engine could be used to solve mathematical problems. Ada closely worked with Babbage and it’s been reported that she even suggested the use of the binary system rather than the decimal system to store data. She noticed that certain groups of operations are carried out over and over again during the course of a calculation and proposed that a conditional instruction be used to force the analytical engine to perform the same sequence of operations many times. This action is the same as the repeat or loop function found in most of today’s high-level languages. Ada devised algorithms to perform the calculation of Bernoulli numbers, which makes her one of the founders of numerical computation. Some regard Ada as the first computer programmer, who was constructing algorithms a century before programming became a recognized discipline. In the 1970s the US Department of Defense commissioned a language for both general-purpose and real-time computing and named it Ada in her honor. Mechanical computing devices continued to be used in compiling mathematical tables and performing the arithmetic operations used by everyone from engineers to accountants until about the 1960s. The practical high-speed computer had to await the development of the electronics industry. Before we introduce the first electromechanical computers, we describe a very important step in the history of the computer, the growth of the technology that made electrical and electronic computers possible.
|