The Difference Engine was an automatic, mechanical calculator designed to tabulate polynomial functions. Both logarithmic and trigonometric functions can be approximated by polynomials, so a difference engine can compute many useful sets of numbers.
Contents 
J. H. Müller, an engineer in the Hessian army conceived the idea in a book published in 1786, but failed to find funding to progress this further.^{[1]}
In 1822, Charles Babbage proposed the use of such a machine in a paper to the Royal Astronomical Society on 14 June entitled "Note on the application of machinery to the computation of astronomical and mathematical tables".^{[2]} This machine used the decimal number system and was powered by cranking a handle. The British government initially financed the project, but withdrew funding when Babbage repeatedly asked for more money while making no apparent progress on building the machine. Babbage went on to design his much more general analytical engine but later produced an improved difference engine design (his "Difference Engine No. 2") between 1847 and 1849. Inspired by Babbage's difference engine plans, Per Georg Scheutz built several Difference Engines from 1855 onwards; one 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.^{[citation needed]}
Based on Babbage's original plans, the London Science Museum constructed 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 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, 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 longstanding debate whether Babbage's design would actually have worked. (One of the reasons formerly advanced for the noncompletion of Babbage's engines had been that engineering methods were insufficiently developed in the Victorian era.)
Although the "printer" is here referred to as such, its primary purpose is to produce stereotype plates for use in printing presses; Babbage's intention being that the Engine's results be conveyed directly to mass printing, rather than through a fallible human typesetter. 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 has been on exhibit at the Computer History Museum in Mountain View, California starting on 10 May 2008 and continuing through the end of 2009.^{[3]}^{[4]}^{[5]}
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 (n − 1) first and higher derivatives of the polynomial.
In the Babbage design, one iteration i.e. one full set of addition and carry operations happens once for four rotations of the crank. Odd and even columns alternatively perform an addition in one cycle. The sequence of operations for column n is thus:
Steps 1,2,3,4 occur for every odd column while steps 3,4,1,2 occur for every even column.
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:
The engine represents negative numbers as ten's complements. Subtraction amounts to addition of a negative number. This works in exactly the same manner that modern computers perform subtraction, known as two's complement.
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. It may be illustrated with a small example. Consider the quadratic polynomial
p(x) = 2x^{2} − 3x + 2
and suppose we want to tabulate the values p(0), p(1), p(2), p(3), p(4) etc. 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) = 2x^{2} − 3x + 2  diff1(x) = ( p(x+1)  p(x) )  diff2(x) = ( diff1(x+1)  diff1(x) ) 

0  2  1  4 
1  1  3  4 
2  4  7  4 
3  11  11  
4  22 
Notice how the values in the fourth column are constant. This is no mere coincidence. In fact, if you start with any polynomial of degree n, the column number n + 1 will always be constant. This crucial fact makes the method work, as we will see next.
We constructed this table from the left to the right, but now we can continue it from the right to the left down a diagonal in order to compute more values of our polynomial.
To calculate p(5) we use the values from the lowest diagonal. We start with the fourth column constant value of 4 and copy it down the column. Then we continue the third column by adding 4 to 11 to get 15. Next we 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 our case (the last elements in the first and second columns); if we wanted to tabulate polynomials of degree n, we'd need enough 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 were able to store 4 numbers with 15 digits each.^{[citation needed]}
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 1_{0} gets the value of the function at the start of computation f(0). Col 2_{0} is the difference between f(1) and f(0)...^{[6]}
If the function to be calculated is a polynomial function, expressed as
the initial values can be calculated directly from the constant coefficients a_{0}, a_{1},a_{2}, ..., a_{n} without calculating any data points. The initial values are thus:
Functions that are not polynomial functions but are infinitely differentiable 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 of its derivatives. For many functions the higher derivatives are trivial to obtain; the sine function at 0 has derivates of 0 or + / − 1 for all derivates. 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 a N1th degree polynomial interpolation of the function is found.^{[6]} With the optimized polynomial, the initial values can be calculated as above.
The Difference Engine was an automatic, mechanical calculator designed to tabulate polynomial functions. Both logarithmic and trigonometric functions can be approximated by polynomials, so a difference engine can compute many useful sets of numbers.
Contents 
Wikisource has original text related to this article: 
J. H. Müller, an engineer in the Hessian army conceived the idea in a book published in 1786, but failed to find funding to progress this further.^{[1]}^{[2]}^{[3]}
In 1822, Charles Babbage proposed the use of such a machine in a paper to the Royal Astronomical Society on 14 June entitled "Note on the application of machinery to the computation of astronomical and mathematical tables".^{[4]} This machine used the decimal number system and was powered by cranking a handle. The British government initially financed the project, but withdrew funding when it became apparent that the machine would cost much more than originally anticipated. Babbage went on to design his much more general analytical engine but later produced an improved difference engine design (his "Difference Engine No. 2") between 1847 and 1849. Inspired by Babbage's difference engine plans, Per Georg Scheutz built several Difference Engines from 1855 onwards; one 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.^{[citation needed]}
Based on Babbage's original plans, the London Science Museum constructed 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 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, 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 longstanding debate whether Babbage's design would actually have worked. (One of the reasons formerly advanced for the noncompletion of Babbage's engines had been that engineering methods were insufficiently developed in the Victorian era.)
Although the "printer" is here referred to as such, its primary purpose is to produce stereotype plates for use in printing presses; Babbage's intention being that the Engine's results be conveyed directly to mass printing, rather than through a fallible human typesetter. 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 has been on exhibit at the Computer History Museum in Mountain View, California starting on 10 May 2008 and continuing through the end of 2010.^{[5]}^{[6]}^{[7]}
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 $(n1)$ first and higher derivatives of the polynomial.
In the Babbage design, one iteration i.e. one full set of addition and carry operations happens once for four rotations of the crank. Odd and even columns alternatively perform an addition in one cycle. The sequence of operations for column $n$ is thus:
Steps 1,2,3,4 occur for every odd column while steps 3,4,1,2 occur for every even column.
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:
The engine represents negative numbers as ten's complements. Subtraction amounts to addition of a negative number. This works in exactly the same manner that modern computers perform subtraction, known as two's complement.
's difference engine, built from Babbage's design. The design has the same precision on all columns, but when calculating converging polynomials, the precision on the higherorder columns could be lower. The Engine is not a replica (there never was one built during Babbage's lifetime); therefore this is the first one  the original.]]
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. It may be illustrated with a small example. Consider the quadratic polynomial
$p(x)\; =\; 2x^2\; \; 3x\; +\; 2$
and suppose we want to tabulate the values p(0), p(1), p(2), p(3), p(4) etc. 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) = 2x^{2} − 3x + 2  diff1(x) = ( p(x+1)  p(x) )  diff2(x) = ( diff1(x+1)  diff1(x) ) 

0  2  1  4 
1  1  3  4 
2  4  7  4 
3  11  11  
4  22 
Notice how the values in the fourth column are constant. This is no mere coincidence. In fact, if you start with any polynomial of degree n, the column number n + 1 will always be constant. This crucial fact makes the method work, as we will see next.
We constructed this table from the left to the right, but now we can continue it from the right to the left down a diagonal in order to compute more values of our polynomial.
To calculate p(5) we use the values from the lowest diagonal. We start with the fourth column constant value of 4 and copy it down the column. Then we continue the third column by adding 4 to 11 to get 15. Next we 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 our case (the last elements in the first and second columns); if we wanted to tabulate polynomials of degree n, we'd need enough 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 were able to store 4 numbers with 15 digits each.^{[citation needed]}
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 $1\_0$ gets the value of the function at the start of computation $f(0)$. Col $2\_0$ is the difference between $f(1)$ and $f(0)$...^{[8]}
If the function to be calculated is a polynomial function, expressed as
the initial values can be calculated directly from the constant coefficients a_{0}, a_{1},a_{2}, ..., a_{n} without calculating any data points. The initial values are thus:
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 of its derivatives. For many functions the higher derivatives are trivial to obtain; the sine function at 0 has derivates of 0 or $+/1$ for all derivates. Setting 0 as the start of computation we get the simplified Maclaurin series
\sum_{n=0}^{\infin} \frac{f^{(n)}(0)}{n!} (x)^{n}
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
a_n \equiv \frac{f^{(n)}(0)}{n!}
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 a N1th degree polynomial interpolation of the function is found.^{[8]} With the optimized polynomial, the initial values can be calculated as above.

Wikimedia Commons has media related to: Difference engines 
