A difference engine is an automatic mechanical calculator designed to tabulate polynomial functions. The name derives from the method of divided differences, a way to interpolate or tabulate functions by using a small set of polynomial coefficients. Most mathematical functions commonly used by engineers, scientists and navigators, including logarithmic and trigonometric functions, can be approximated by polynomials, so a difference engine can compute many useful tables of numbers.
|Wikisource has original text related to this article:|
J. H. Müller, an engineer in the Hessian army, conceived of the idea of a difference machine. This was described in a book published in 1786, but Müller was unable to obtain funding to progress with the idea.
Charles Babbage began to construct a small difference engine in 1819 and had completed it by 1822 (Difference Engine 0). He announced his invention on June 14, 1822, in a paper to the Royal Astronomical Society, entitled "Note on the application of machinery to the computation of astronomical and mathematical tables". This machine used the decimal number system and was powered by cranking a handle. The British government was interested, since producing tables was time-consuming and expensive and they hoped the difference engine would make the task more economical.
In 1823, the British government gave Babbage £1700 to start work on the project. Although Babbage's design was feasible, the metalworking techniques of the era could not economically make parts in the precision and quantity required. Thus the implementation proved to be much more expensive and doubtful of success than the government's initial estimate. In 1832 Babbage and Joseph Clement produced a small working model (1/7 of the calculating section of Difference Engine No. 1, which was intended to operate on 20-digit numbers and sixth-order differences) which operated on 6-digit numbers and second-order differences. Lady Byron described seeing the working prototype in 1833: "We both went to see the thinking machine (for so it seems) last Monday. It raised several Nos. to the 2nd and 3rd powers, and extracted the root of a Quadratic equation." Work on the larger engine was suspended in 1833.
By the time the government abandoned the project in 1842, Babbage had received and spent over £17,000 on development, which still fell short of achieving a working engine. The government valued only the machine's output (economically produced tables), not the development (at unknown and unpredictable cost to complete) of the machine itself. Babbage did not, or was unwilling to, recognize that predicament. Meanwhile, Babbage's attention had moved on to developing an analytical engine, further undermining the government’s confidence in the eventual success of the difference engine. By improving the concept as an analytical engine, Babbage had made the difference engine concept obsolete, and the project to implement it an utter failure in the view of the government.
Inspired by Babbage's difference engine plans, Per Georg Scheutz, with his son Edvard, built several difference engines from 1840 onwards (up to 15-digit numbers and fourth-order differences from 1853 onwards), one of which was sold to the British government in 1859. Martin Wiberg improved Scheutz's construction but used his device only for producing and publishing printed logarithmic tables.
Babbage went on to design his much more general analytical engine, but later produced an improved "Difference Engine No. 2" design (31-digit numbers and seventh-order differences), between 1846 and 1849. Babbage was able to take advantage of ideas developed for the analytical engine to make the new difference engine calculate more quickly while using fewer parts.
Construction of two working No. 2 difference engines
During the 1980s, Allan G. Bromley, an associate professor at the University of Sydney, Australia, studied Babbage's original drawings for the Difference and Analytical Engines at the Science Museum library in London. This work led the Science Museum to construct a working difference engine No. 2 from 1989 to 1991, under Doron Swade, the then Curator of Computing. This was to celebrate the 200th anniversary of Babbage's birth in 2001. In 2000, the printer which Babbage originally designed for the difference engine was also completed. The conversion of the original design drawings into drawings suitable for engineering manufacturers' use revealed some minor errors in Babbage's design (possibly introduced as a protection in case the plans were stolen), which had to be corrected. Once completed, both the engine and its printer worked flawlessly, and still do. The difference engine and printer were constructed to tolerances achievable with 19th-century technology, resolving a long-standing debate as to whether Babbage's design would actually have worked. (One of the reasons formerly advanced for the non-completion of Babbage's engines had been that engineering methods were insufficiently developed in the Victorian era.)
The printer's primary purpose is to produce stereotype plates for use in printing presses, which it does by pressing type into soft plaster to create a flong. Babbage intended that the Engine's results be conveyed directly to mass printing, having recognized that many errors in previous tables were not the result of human calculating mistakes but from error in the manual typesetting process. The printer's paper output is mainly a means of checking the Engine's performance.
In addition to funding the construction of the output mechanism for the Science Museum's Difference Engine No. 2, Nathan Myhrvold commissioned the construction of a second complete Difference Engine No. 2, which was on exhibit at the Computer History Museum in Mountain View, California until 31 January 2016. It has since been transferred to Intellectual Ventures in Seattle where it is on display just outside the main lobby.
|This section does not cite any sources. (June 2017) (Learn how and when to remove this template message)|
The difference engine consists of a number of columns, numbered from 1 to N. The machine is able to store one decimal number in each column. The machine can only add the value of a column n + 1 to column n to produce the new value of n. Column N can only store a constant, column 1 displays (and possibly prints) the value of the calculation on the current iteration.
The engine is programmed by setting initial values to the columns. Column 1 is set to the value of the polynomial at the start of computation. Column 2 is set to a value derived from the first and higher derivatives of the polynomial at the same value of X. Each of the columns from 3 to N is set to a value derived from the first and higher derivatives of the polynomial.
In the Babbage design, one iteration (i.e., one full set of addition and carry operations) happens for each rotation of the main shaft. Odd and even columns alternately perform an addition in one cycle. The sequence of operations for column is thus:
- Count up, receiving the value from column (Addition step)
- Perform carry propagation on the counted up value
- Count down to zero, adding to column
- Reset the counted-down value to its original value
Steps 1,2,3,4 occur for every odd column, while steps 3,4,1,2 occur for every even column.
While Babbage's original design placed the crank directly on the main shaft, it was later realized that the force required to crank the machine would have been too great for a human to handle comfortably. Therefore, the two models that were built incorporate a 4:1 reduction gear at the crank, and four revolutions of the crank are required to perform one full cycle.
Each iteration creates a new result, and is accomplished in four steps corresponding to four complete turns of the handle shown at the far right in the picture below. The four steps are:
- Step 1. All even numbered columns (2,4,6,8) are added to all odd numbered columns (1,3,5,7) simultaneously. An interior sweep arm turns each even column to cause whatever number is on each wheel to count down to zero. As a wheel turns to zero, it transfers its value to a sector gear located between the odd/even columns. These values are transferred to the odd column causing them to count up. Any odd column value that passes from "9" to "0" activates a carry lever.
- Step 2. Carry propagation is accomplished by a set of spiral arms in the back that poll the carry levers in a helical manner so that a carry at any level can increment the wheel above by one. That can create a carry, which is why the arms move in a spiral. At the same time, the sector gears are returned to their original position, which causes them to increment the even column wheels back to their original values. The sector gears are double-high on one side so they can be lifted to disengage from the odd column wheels while they still remain in contact with the even column wheels.
- Step 3. This is like Step 1, except it is odd columns (3,5,7) added to even columns (2,4,6), and column one has its values transferred by a sector gear to the print mechanism on the left end of the engine. Any even column value that passes from "9" to "0" activates a carry lever. The column 1 value, the result for the polynomial, is sent to the attached printer mechanism.
- Step 4. This is like Step 2, but for doing carries on even columns, and returning odd columns to their original values.
The engine represents negative numbers as ten's complements. Subtraction amounts to addition of a negative number. This works in the same manner that modern computers perform subtraction, known as two's complement.
Method of differences
The principle of a difference engine is Newton's method of divided differences. If the initial value of a polynomial (and of its finite differences) is calculated by some means for some value of X, the difference engine can calculate any number of nearby values, using the method generally known as the method of finite differences. For example, consider the quadratic polynomial
with the goal of tabulating the values p(0), p(1), p(2), p(3), p(4), and so forth. The table below is constructed as follows: the second column contains the values of the polynomial, the third column contains the differences of the two left neighbors in the second column, and the fourth column contains the differences of the two neighbors in the third column:
|x||p(x) = 2x2 − 3x + 2||diff1(x) = ( p(x + 1) − p(x) )||diff2(x) = ( diff1(x + 1) − diff1(x) )|
The numbers in the third values-column are constant. In fact, by starting with any polynomial of degree n, the column number n + 1 will always be constant. This is the crucial fact behind the success of the method.
This table was built from left to right, but it is possible to continue building it from right to left down a diagonal in order to compute more values. To calculate p(5) use the values from the lowest diagonal. Start with the fourth column constant value of 4 and copy it down the column. Then continue the third column by adding 4 to 11 to get 15. Next continue the second column by taking its previous value, 22 and adding the 15 from the third column. Thus p(5) is 22 + 15 = 37. In order to compute p(6), we iterate the same algorithm on the p(5) values: take 4 from the fourth column, add that to the third column's value 15 to get 19, then add that to the second column's value 37 to get 56, which is p(6). This process may be continued ad infinitum. The values of the polynomial are produced without ever having to multiply. A difference engine only needs to be able to add. From one loop to the next, it needs to store 2 numbers—in this example (the last elements in the first and second columns). To tabulate polynomials of degree n, one needs sufficient storage to hold n numbers.
Babbage's difference engine No. 2, finally built in 1991, could hold 8 numbers of 31 decimal digits each and could thus tabulate 7th degree polynomials to that precision. The best machines from Scheutz could store 4 numbers with 15 digits each.
The initial values of columns can be calculated by first manually calculating N consecutive values of the function and by backtracking, i.e. calculating the required differences.
Col gets the value of the function at the start of computation . Col is the difference between and …
If the function to be calculated is a polynomial function, expressed as
the initial values can be calculated directly from the constant coefficients a0, a1,a2, …, an without calculating any data points. The initial values are thus:
- Col = a0
- Col = a1 + a2 + a3 + a4 + … + an
- Col = 2a2 + 6a3 + 14a4 + 30a5 + …
- Col = 6a3 + 36a4 + 150a5 + …
- Col = 24a4 + 240a5 + …
- Col = 120a5 + …
Use of derivatives
Many commonly used functions are analytic functions, which can be expressed as power series, for example as a Taylor series. The initial values can be calculated to any degree of accuracy; if done correctly the engine will give exact results for first N steps. After that, the engine will only give an approximation of the function.
The Taylor series expresses the function as a sum obtained from its derivatives at one point. For many functions the higher derivatives are trivial to obtain; for instance, the sine function at 0 has values of 0 or for all derivatives. Setting 0 as the start of computation we get the simplified Maclaurin series
The same method of calculating the initial values from the coefficients can be used as for polynomial functions. The polynomial constant coefficients will now have the value
The problem with the methods described above is that errors will accumulate and the series will tend to diverge from the true function. A solution which guarantees a constant maximum error is to use curve fitting. A minimum of N values are calculated evenly spaced along the range of the desired calculations. Using a curve fitting technique like Gaussian reduction an N−1th degree polynomial interpolation of the function is found. With the optimized polynomial, the initial values can be calculated as above.
- Johann Helfrich von Müller, Beschreibung seiner neu erfundenen Rechenmachine, nach ihrer Gestalt, ihrem Gebrauch und Nutzen [Description of his newly invented calculating machine, according to its form, its use and benefit] (Frankfurt and Mainz, Germany: Varrentrapp Sohn & Wenner, 1786); pages 48-50. The following Web site (in German) contains detailed photos of Müller's calculator as well as a transcription of Müller's booklet, Beschreibung …: http://www.fbi.fh-darmstadt.de/fileadmin/vmi/darmstadt/objekte/rechenmaschinen/mueller/index.htm . An animated simulation of Müller's machine in operation is available on this Web site (in German): http://www.fbi.fh-darmstadt.de/fileadmin/vmi/darmstadt/objekte/rechenmaschinen/mueller/simulation/index.htm .
- Michael Lindgren (Craig G. McKay, trans.), Glory and Failure: The Difference Engines of Johann Müller, Charles Babbage, and Georg and Edvard Scheutz (Cambridge, Massachusetts: MIT Press, 1990), pages 64 ff.
- Swedin, E.G.; Ferro, D.L. (2005). Computers: The Life Story of a Technology. Greenwood Press, Westport, CT. p. 14. Retrieved 2007-11-17.
- Copeland, Jack; Bowen, Jonathan; Sprevak, Mark; Wilson, Robin (2017-02-16). The Turing Guide. Oxford University Press. p. 251. ISBN 9780191065002.
- O'Connor, John J.; Robertson, Edmund F. (1998). "Charles Babbage". MacTutor History of Mathematics archive. School of Mathematics and Statistics, University of St Andrews, Scotland. Retrieved 2006-06-14.
- Dasgupta, Subrata (2014-01-07). It Began with Babbage: The Genesis of Computer Science. Oxford University Press. pp. 22,25. ISBN 9780199309436.
- Campbell-Kelly, Martin (2004). Computer: A History of the Information Machine 2nd ed. Boulder, Co: Westview Press. ISBN 978-0-8133-4264-1.
- O'Regan, Gerard (2012-03-05). A Brief History of Computing. Springer Science & Business Media. p. 204. ISBN 9781447123590.
- Snyder, Laura J. (2011-02-22). The Philosophical Breakfast Club: Four Remarkable Friends Who Transformed Science and Changed the World. Crown/Archetype. p. 192. ISBN 9780307716170.
- Toole, Betty Alexandra; Lovelace, Ada (1998). Ada, the Enchantress of Numbers. Mill Valley, California: Strawberry Press. p. 38. ISBN 0912647183. OCLC 40943907.
- Weld, Charles Richard (1848). A History of the Royal Society: With Memoirs of the Presidents. J. W. Parker. pp. 387–390.
- Merzbach, Uta C.; Zoology, Smithsonian Contributions To; Ripley, S. Dillon; Merzbach, Uta C. First Printing Calculator. pp. 8–9,13.
- Raymond Clare Archibald: Martin Wiberg, his Table and Difference Engine, Mathematical Tables and Other Aids to Computation, 1947(2:20) 371–374. (online review) (PDF; 561 kB).
- Snyder, Laura J. (2011). The Philosophical Breakfast Club. New York: Broadway Brooks. ISBN 978-0-7679-3048-2.
- Morris, Charles R. (2014-03-04). The Dawn of Innovation: The First American Industrial Revolution. PublicAffairs. p. 63. ISBN 9781610393577.
- IEEE Annals of the History of Computing, 22(4), October–December 2000.
- Babbage printer finally runs, BBC news quoting Reg Crick Accessed May 17, 2012
- "At the Museum". Retrieved 2009-07-28.
- Terdiman, Daniel (April 9, 2008). "Charles Babbage's masterpiece difference engine comes to Silicon Valley". CNET News. Retrieved 2008-04-28.
- "The Computer History Museum Extends Its Exhibition of Babbage's Difference Engine No. 2". press release. Computer History Museum. March 31, 2009. Retrieved 2009-11-06.
- Difference Engine Leaves Computer History Museum, Mark Moack, Mountain View Voice, January 29, 2016
- O'Regan, Gerard (2012-03-05). A Brief History of Computing. Springer Science & Business Media. ISBN 9781447123590.
- Thelen, Ed (2008). "Babbage Difference Engine #2 – How to Initialize the Machine -". Retrieved 2009-01-11.
- Snyder, Laura J. (2011). The Philosophical Breakfast Club: Four Remarkable Friends Who Transformed Science and Changed the World. Broadway. ISBN 978-0-7679-3048-2.
- Swade, Doron (September 1996). Charles Babbage's Difference Engine No. 2 – Technical Description. Science Museum Papers in the History of Technology No 5. London: National Museum of Science and Industry. Retrieved 2009-01-11.
- Swade, Doron (2002). The Difference Engine: Charles Babbage and the Quest to Build the First Computer. Penguin (reprint). ISBN 0-14-200144-9.
- Swade, Doron (2001). The Cogwheel Brain. Abacus. ISBN 0-349-11239-8.
- Doron Swade, Nathan Myhrvold (June 10, 2008). Myhrvold & Swade Discuss Babbage's Difference Engine. (lecture: Len Shustek, intro; Doron Swade @7:35, Nathan Myhrvold @36:25; discussion @46:45). Computer History Museum. Retrieved 2009-11-06.
|Wikimedia Commons has media related to Difference engines.|
- The Computer History Museum exhibition on Babbage and the difference engine
- Babbage Science Museum, London. Description of Babbage's calculating machine projects and the Science Museum's study of Babbage's works, including modern reconstruction and model-building projects.
- Meccano Difference Engine #1
- Meccano Difference Engine #2
- Babbage's First Difference Engine – How it was intended to work
- Analysis of Expenditure on Babbage's Difference Engine No. 1
- Difference Engine in Lego
- Difference engine workings with animations
- Difference Engine No1 specimen piece at the Powerhouse Museum, Sydney
- Gigapixel Image of the Difference Engine No2
- Scheutz Difference Engine in action video. Purchased by the Dudley Observatory's first director, Benjamin Apthorp Gould, in 1856. Gould was an acquaintance of Babbage. The Difference Engine performed astronomical calculations for the Observatory for many years, and is now part of the national collection at the Smithsonian.
- Hyman, A. (1982). Charles Babbage: pioneer of the computer. Princeton University Press.