The Genius of Babbage’s Analytical Engine
The Genius of Babbage’s Analytical Engine
How Charles Babbage’s design of a general-purpose mechanical computer anticipated the key features of modern processors
Join the DZone community and get the full member experience.Join For Free
In the early 1800s, a ship’s navigator used a sextant to measure sightlines to the Sun, Moon, and other celestial bodies and, with the assistance of nautical tables, computed the ship’s position. Unfortunately, the numerical values in the tables had been prepared using the finest technology available at the time, which consisted of humans working through tedious calculations by hand. Because of this, the tables were riddled with errors, which could easily lead to catastrophe for a ship at sea.
In 1820, Charles Babbage, as a founding member of the Astronomical Society of London, undertook to improve the accuracy of nautical tables. Babbage came to believe it would be possible to construct a machine capable of computing the numeric values for the tables and printing the results. His proposal to develop a machine called the Difference Engine for this purpose led to an effort that terminated after ten years without producing a working apparatus.
Undaunted, he set to work designing a far more capable computing machine called the Analytical Engine. Although a working model of the Analytical Engine was never constructed, the detailed notes Babbage developed from 1834 until his death in 1871 described a computing architecture that appeared to be both workable and complete. The Analytical Engine was a general-purpose programmable computing device. The design was entirely mechanical and was to be constructed largely of brass. In operation, it would be driven by a shaft powered by a steam engine.
Borrowing ideas from the punched cards of the Jacquard loom, the rotating studded barrels used in music boxes, and the technology of the Difference Engine, the Analytical Engine design was, otherwise, Babbage's original creation.
Unlike most modern computers, the Analytical Engine represented numbers in signed decimal form. The decision to use base-10 numbers rather than the base-2 logic of most modern computers was the result of a fundamental difference between mechanical technology and digital electronics. It is straightforward to construct mechanical wheels with ten positions, so Babbage chose the human-compatible base-10 format because it was not significantly more technically challenging than using some other number base. Simple digital circuits, on the other hand, are not capable of maintaining ten different states with the ease of a mechanical wheel.
All numbers in the Analytical Engine consisted of 40 decimal digits. The large number of digits was likely selected to reduce problems with numerical overflow. The Analytical Engine did not support floating-point mathematics.
Each number was stored on a vertical axis containing 40 wheels, with each wheel capable of resting in ten positions corresponding to the digits 0-9. A 41st number wheel contained the sign: any even number on this wheel represented a positive sign and any odd number represented a negative sign.
The Analytical Engine axis was somewhat analogous to the register in modern processors, except the readout of an axis was destructive. If it was necessary to retain an axis's value after it had been read, another axis had to receive a copy of the value. Numbers were transferred from one axis to another, or used in computations, by engaging a gear with each digit wheel and rotating the wheel to read out the numerical value.
Babbage referred to the axes serving as system memory as the "store." Although the size of the Analytical Engine store was not precisely defined, it appears to have consisted of about 100 axes.
The addition of two numbers used a process somewhat similar to the method of addition taught to schoolchildren. Assume a number stored on one axis, let's call it the addend, was to be added to a number on another axis, call it the accumulator. The machine would connect each addend digit wheel to the corresponding accumulator digit wheel through a train of gears. It would then simultaneously rotate each addend digit downward to zero while driving the accumulator digit an equivalent rotation in the increasing direction.
If an accumulator digit wrapped around from nine to zero, the next most significant accumulator digit would increment by one. This carry operation would propagate across as many digits as needed (think of adding 1 to 999,999). By the end of the process, the addend axis would hold the value zero, and the accumulator axis would hold the sum of the two numbers. The propagation of carries from one digit to the next was the most mechanically complex part of the addition process.
Operations in the Analytical Engine were sequenced by music box-like rotating barrels in a construct called the "mill," which is analogous to the processing component of a modern CPU. Each Analytical Engine instruction was encoded in a vertical row of locations on the barrel where the presence or absence of a stud at a particular location either engaged a section of the Engine's machinery or left the state of that section unchanged. Based on Babbage's hypothesized execution speed, the addition of two 40-digit numbers, including the propagation of carries, would take about three seconds.
Babbage invented several important concepts for the Engine that remain relevant to digital processors today. His design supported a degree of parallel processing that accelerated the computation of a series of values for output as numerical tables. Mathematical operations, such as addition, implemented a form of pipelining, in which sequential operations on different data values overlapped in time.
Babbage was well aware of the complexities associated with mechanical devices such as friction, gear backlash, and wear over time. To prevent errors caused by these effects, the Engine incorporated mechanisms called "lockings" that activated during data transfers across axes. The lockings forced the number wheels into valid positions and prevented accumulated errors from allowing a wheel to drift to an incorrect value. The use of lockings is analogous to the amplification of potentially weak input signals to produce stronger outputs by the digital logic gates in modern processors.
The Analytical Engine was programmed using punched cards and supported branching operations and nested loops. The most complex program for the Analytical Engine was developed by Ada Lovelace to compute the Bernoulli numbers.
In the terminology of computability theory, the design of the Analytical Engine is Turing-complete, meaning that in principle it can implement any arbitrary algorithm, as long as limitations on memory size are ignored.
Babbage constructed a trial model of a portion of the Analytical Engine mill, which is currently on display at the Science Museum in London.
Babbage's design of the Analytical Engine was a tremendous intellectual achievement that foreshadowed the rise of practical digital computing over 100 years later and is reflected in today's most advanced CPUs.
This article is adapted from my new book, Modern Computer Architecture and Organization, published by Packt Publishing. The book includes chapter exercises that develop simulations of Analytical Engine operations. These exercises, along with example Python solutions, are available at the book's GitHub repository.
Opinions expressed by DZone contributors are their own.