NUMBERS
Numbers in the machine regularly consist of 23 decimal digits. The 24th numerical position at the left in any register contains only 0 for a positive number and only 9 for a negative number. Nines complements ([see Supplement 2]) are used for negative numbers. For example,-00284 is represented as 999715, supposing that we had 5-digit numbers instead of 23-digit numbers. The sum of two nines complements is automatically corrected so that it is still a correct nines complement. The device that accomplishes this is called end-around-carry ([see Supplement 2]). The decimal point is fixed for each problem; in other words, in any problem, the decimal point is consistently kept in one place, usually between the 15th and 16th decimal columns from the right.
HOW INFORMATION GOES
INTO THE MACHINE
Numerical information may go into the machine in any one of 3 ways: (1) by regular IBM punch cards, using standard IBM card feeds (panel 16); (2) by hand-set dial switches (panels 1, 2); and (3) by long loops of punched tape placed on the value tape feeds (panels 12 to 14). Three sets of 24 columns each punched on a regular IBM punch card can be used to send 3 numbers and their signs into the machine in one machine cycle. This is the fastest way for giving numbers to the machine, but the most limited; for the cards must be referred to in order and can be referred to automatically only once. Also, there is the risk that they may be out of order. A card may be passed through the machine without reading; this saves some sorting in preparing cards for the machine. Machines for preparing the cards are regular IBM key punches, and machines for sorting them after preparation are regular IBM card sorters.
In panels 1 and 2 there are 60 registers by which unchanging numbers like 1, or 3.14159265···, or 7.65 may be put into the machine. These are called the constant registers. Each constant register consists of 24 dial switches and contains 23 digits and a sign, 0 if positive and 9 if negative. Whenever the mathematician says a certain constant is needed for a problem, the operator of the machine walks over to these panels, and, while the machine is turned off, sets the dial switches for the number, one by one, by hand. If we need 40 constants of 10 digits each for a problem, then the operator sets 400 dial switches by hand and makes certain that the remaining 14 switches in each of the 40 constant registers used are either at 0 or 9, depending on the sign of the number. Only then can he return to start the machine.
Fig. 9. Value tape code.
The third means by which numerical information can be put into the machine is the value tape feeds, in panels 12, 13, and 14. Here the machine can consult tables of numbers. The numbers are punched on paper tape 24 holes wide, made of punch-card stock. Tapes for the value tape feeds may be prepared by hand or by the machine itself using punch cards or machine calculation. The tapes use equally spaced arguments ([see Supplement 2]). The tape punch changes the decimal digits in its keyboard into the following punching code ([see Fig. 9]):
| 0 | 0000 | 5 | 1100 | |
| 1 | 1000 | 6 | 1010 | |
| 2 | 0010 | 7 | 1001 | |
| 3 | 0010 | 8 | 0110 | |
| 4 | 0001 | 9 | 0101 |
Here the 1 denotes a punched hole and 0 no punched hole, and the 4 columns from left to right of the code correspond to 4 rows of the paper tape from bottom to top. To make sure the value tape is correct, the machine itself can read the value tape and check it mathematically or compare it with punch-card values.
HOW INFORMATION COMES
OUT OF THE MACHINE
Information comes out of the machine in any one of three ways: (1) by punching on IBM cards with a regular IBM card punch that is built into the machine (panel 17), (2) by typing on paper sheets with electric typewriters (panels 16 and 17), and (3) by punching paper tape 24 holes wide of the same kind as is fed into the machine.
Usually, one of the electric typewriters is used to print a result for a visual check and to print it before the machine makes a specified check of the value. Then, about 10 seconds later, after the result has been checked as specified in the machine, the checked result is printed by the second typewriter. In the second typewriter, a special one-use carbon ribbon of paper is used to produce copy for publication by a photographic process.
The card punch writes a number more rapidly than an electric typewriter. This extra speed is sometimes very useful. However, the punch’s chief purpose is to record intermediate results on punch cards. Then, if there is a machine failure, and if the problem has been well organized, the problem may be run over from these intermediate results, instead of requiring a return to the original starting information. The tape punch used for preparing tape by hand can also be operated by cable from the machine.
HOW INFORMATION IS HANDLED
IN THE MACHINE
The machine is a mechanical brain. So, between taking in information and putting out information, the machine does some “thinking.” It does this thinking according to instructions. The instructions go into the machine as: (1) the setting of switches, or (2) the pressing of buttons, or (3) the wiring of plugboards, or (4) feeding in tape punched with holes. The instructions are remembered in the machine in these 4 ways, and we can call these sets of devices the control of the machine.
To illustrate: One of the buttons pressed for every problem is the Start Key: when you press it, the machine starts to work on the problem. One of the switches with which you give instructions is a switch that turns electric typewriter 1 on or off. One of the plugboards contains some hubs by which you can tell the machine how many figures to choose in the quotient when dividing, for clearly you do not need a quotient of 23 figures every time the machine divides. You can have 5 choices in any one problem; you can specify them by plugging, and you can call for any one of 5 choices of quotient size from time to time during the problem. In many cases, when we wish the machine to do the same thing for all of a single problem and do it whenever the occasion arises, we can put the instruction into the wiring of a plugboard. We use plugboard wiring, for example, in fixing the decimal point in multiplication, so that the product will read out properly, and in guiding the operation of the typewriters, so that printing will take place in the columns where we want it.
Sequence of Steps
The most important part of the control of the machine is the sequence-tape feed and its sequence-control tape. These tell the machine a great part of what operations are to be performed.
Fig. 10. Sequence-control tape code.
At the end of the room where the machine is, there is the special tape punch mentioned above. It holds a big spool of card stock that is thin, flexible, smooth, and tough. With one keyboard we may prepare value tape. With another keyboard we prepare the sequence-control tape. The tape ([see Fig. 10]) contains places for 24 round punched holes in each row. Some and only some of these holes are punched. Each row of punched holes is equivalent to an instruction to the machine and is called a line of coding or coding line. In general, the instruction has the form:
- Take a number out of Register A;
- put the number into Register B;
- and perform operation C.
The first group of 8 holes at the left is called the A field or the out-field. Here we tell the machine where a number is to be taken from. The middle group of 8 holes is called the B field or the in-field. Here we tell the machine where a number is to be put. The last group of 8 holes is called the C field or the miscellaneous field. Here we tell the machine part or all of the operation that is to be performed.
To illustrate ([see Fig. 10]), we have holes 3, 2, 1 punched in the A field, holes 3, 2 punched in the B field, and hole 7 punched in the C field. Now 321 is the code—or machine language, or machine call number—for storage counter 7; 32 is the code for storage counter 6; and 7 in the C field is the code (in this case, and generally) for “Add, and read the next line of coding.” So, if we punch out this line of coding and put the tape on the machine, we tell the machine to read the number in counter 7, add it into counter 6, and proceed to the next line of coding and read that.
The holes in each group of 8 holes from left to right are numbered: 8, 7, 6, 5, 4, 3, 2, 1. The code 631, for example, means that holes 6, 3, 1 are punched and that no holes are punched at 8, 7, 5, 4, 2. Since it is more natural, the code is read from left to right, or 631, instead of from right to left in the sequence 136.
The devices in the machine have in-codes, used in the in-field, and out-codes, used in the out-field. For each of the 72 regular storage counters, the in-code and the out-code are the same. The first 8 storage counters have the codes 1, 2, 21, 3, 31, 32, 321, 4, 41; the last 2 storage counters, the 71st and the 72nd, have the codes 7321, 74.
The constant registers—often called constant switches, or just switches—naturally have only out-codes, since numbers can be entered into the constant registers only by setting dial switches by hand. The first 8 constant registers have the out-codes 741, 742, 7421, 743, 7431, 7432, 74321, 75, and the 59th and 60th constant registers have the out-codes 821, 83.
Transferring, Adding, and Clearing
Each storage counter has the property that any number transferred into it is added into it. For example, the instruction
- Take the number in switch 741;
- transfer it into storage register 321
is coded:
741, 321, 7
The 7 in the third column is an instruction to the sequence-tape feed to turn up to the next coding line and read it. If any number is already stored in register 321, the content of 741 will be added to it, and the total will then be stored in 321.
Resetting or clearing a regular storage register is accomplished by a coding that is a departure from the usual scheme of “out” and “in.” The instruction
- Clear register 321;
- read the next coding line
is coded:
321, 321, 7
Similarly, you can clear any other regular storage register if you repeat its code in the out-and in-fields. However, a few of the storage registers in the machine have special reset codes, and these may occur in any of the three fields A, B, C.
As the result of a recent modification of the machine, you can easily double the number in any storage register. For example, the instruction
- Double the number in register 321;
- read the next coding line
is coded:
321, 321, 743
Subtracting
If the number in switch 741 is to be subtracted from the number in storage counter 321, the instruction is changed into:
- Take the negative of the number in switch 741;
- transfer it into storage register 321;
- read the next line of coding
The coding line becomes:
741, 321, 732
By putting 32 in the C field, we cause the number in switch 741 to be subtracted from whatever number is in register 321.
We have 2 more choices in adding and subtracting. The value of the number without regard to sign—in other words, its absolute value ([see Supplement 2])—may be added or subtracted. The instruction
Add the absolute value of
is expressed by a C field code 2, and the instruction
Add the negative of the absolute value of
is expressed by a C field code 1.
Multiplying
When we wish to multiply one number by another and get a product, we have 3 numbers. We tell the machine about each of these numbers on a separate line of coding. Multiplication is signaled by sending a number into the multiplicand counter. The multiplicand counter has an in-code 761. If the multiplicand is in 321, the instruction is:
- Take the number in 321;
- enter it as multiplicand;
- read the next coding line
The coding is:
321, 761, 7
On the third following coding line, the multiplier is sent into the multiplier counter. If the multiplier is in switch 741, the instruction is:
- Take the number in 741;
- enter it as multiplier;
- read the next coding line
The coding is:
741, ——, 7
We do not punch anything in the middle field: the machine is “educated” and “knows” that it has started a multiplication and needs a multiplier, and it expects this multiplier in the third coding line. To have no code for the multiplier counter is, of course, a departure from the general rule, but it saves some punching and permits the use of this space for certain other codes, thus saving some operating time.
We need not confuse the 761 in-code for the multiplicand counter with the 761 out-code, which happens to be the out-code of the 25th constant register, because neither can occur in the other’s field. We may, of course, use other registers besides 321 and 741 for supplying the multiplicand and multiplier.
To get the product and put it into any storage counter D, we use two lines of coding one right after the other:
—— —— 6421
8761 D ——
The product counter has the out-code 8761. When the product is desired, it is called for, transferred into counter D, and the multiplication unit is automatically cleared. It takes time, however, for the machine to perform a multiplication. That is the reason for the preceding coding line and the 6421 in the C field. While the multiplication is going on, we can instruct the machine to do other things that we want done. We can insert or interpose coding lines in between the multiplier line and the product line. For example, if we have a multiplier of 10 digits, we can insert 8 coding lines and maybe more. The 6421 code essentially tells the machine to finish both the multiplication and the interposed instructions, and, as soon as the later one of these two tasks is finished, to transfer out the product to counter D.
Up to the middle of 1946, the wiring of the machine was a little different and less convenient. When the product was obtained by the multiplication unit, it had to be accepted and transferred at once into one of the 72 storage registers.
Dividing
Division is called for by first sending the divisor into the divisor counter, and this has a code 76 in the B field. If the divisor is in counter 321, the instruction may be:
- Take the number in 321;
- enter it as divisor;
- read the next coding line
The coding will then be:
321, 76, 7
Three coding lines later, the dividend is called for, and the coding, if the dividend is in switch 7431, is:
7431, ——, 7
We can send the quotient, when ready, into any desired counter Q by the following two lines of coding:
—— —— 642
876 Q ——
In the same way as with multiplication, we can insert a number of coding lines in between the dividend line and the first quotient line.
Both multiplication and division are carried out in the same unit of the machine, the multiply-divide unit. The machine first constructs a table of the multiples of the multiplicand or divisor: 1 times, 2 times, 3 times, ···, 9 times. In multiplication this table is then used by selecting multiples according to the digits of the multiplier one after another. In division the table is used by comparing multiples of the divisor against the dividend and successive remainders, finding which will go and which will not. Since the numbers in the machine are normally of 15 to 23 digits, any particular multiple will be used, on the average, several times, and so this process is relatively efficient. Actually the multiplicand and the divisor go into the same counter. Division, however, has the code 76 and multiplication the code 761, and so the difference is essentially an operation code not in the third or C field.
Consulting a Table
When we desire the machine to consult a table of values (i.e., a function—[see Supplement 2]), we punch the table with its arguments and function values on a tape, and we put the tape on a value tape feed mechanism. The instruction to the machine may be:
- Take the number in register A;
- find the value of the function for this number,
- and enter it in register B.
The coding is:
| —— | —— | 73 |
| A | 7654 | 61 |
| —— | —— | 762 |
| —— | —— | 543 |
| —— | —— | 75431 |
| 841 | 7654 | —— |
| A | 763 | 6421 |
| 8762 | B | 73 |
| —— | 8763 | 7 |
Without explaining this coding line by line, we can say that this is what happens:
The machine reads the argument in register A. The machine reads the argument in the table at which the value tape feed is resting.
It subtracts them, and thereby determines how far away the desired argument is.
The machine then turns the tape that required distance.
It checks that the new argument is the wanted argument.
It reads the value of the function entered at that point on the function tape.
Selecting
There is a storage counter in the machine that is called the selection counter. The selection counter is counter 70 and has the code 732. It has all the properties of an ordinary storage counter and, in addition, one extra property: depending on the sign of the number stored in the selection counter, it is possible to select whether some other number shall be treated positively or negatively. In other words, addition of a number anywhere in the machine may take place either positively or negatively, if the number stored in the selection counter is positive or negative, respectively.
For example, suppose that x is the number in the selection counter. Suppose that y is the number in some other counter A. Suppose that z is the number in counter B. Suppose that we use the coding:
A, B, 7432
What we get in B, because of the 7432 in the third or C field, is z plus y if x is positive or zero, and z minus y if x is negative. In the language of the algebra of logic (see [Chapter 9] and [Supplement 2]), where T( ...) is “the truth value of ...,” the number in b equals:
z + y·T(x ≥ 0) - y·T(x < 0)
(The nines complement of 0, namely 999···9 to 24 digits, is treated by the machine as negative.)
Why do we need an operation like this in a mechanical brain? Among other reasons, what we want to do with a number, in mathematics, often depends on its sign. It may happen that a table is, for negative arguments, the negative of what it is for positive arguments; in other words, F(-x) =-F(x). This is true, for instance, for a table of cubes {F(x) = x³} or for a table of trigonometric tangents ([see Supplement 2]). If so, we certainly do not want to take the time and trouble to list the whole table. We put down only half the table and then, if x is negative, use the negative of the value in the table. In order to apply such a time-saving rule when using the machine, we need the selection counter or its equivalent.
Checking
There is another special counter in the machine that is called the check counter. It also has all the properties of an ordinary storage counter and, in addition, one extra property: If the sign of the number stored in the check counter on a certain coding line is negative, then on the next coding line the machine may be stopped. In other words, suppose that the check counter stores a certain tolerance t. Suppose, under the instructions we give the machine, that it calculates a positive number x that ought to be less than this tolerance. Suppose that something may go wrong and that x actually may be greater than t. Then we put a check into our instructions. We tell the machine:
- When you have found x, subtract it from t.
- If the result is positive, go ahead.
- If the result is negative or zero, stop!
Here is the coding. Suppose that the tolerance t is in switch 751. Suppose that the number x to be checked is in counter 4321. Then the instructions and coding are:
| Clear the check counter | — | — | 7 |
| Put in the tolerance, from switch 751 | 751 | 74 | 7 |
| Subtract the absolute value of the number to be checked | 4321 | 74 | 71 |
| Stop, O Mechanical Brain, if your result be negative! | — | — | 64 |
An operation like this is very useful in a mechanical brain. It enables the calculation to be interrupted if something has gone wrong. Of course, other operations of checking besides this one are used—for example, inspecting for reasonableness the results printed on typewriter 1.
Other Operations
There are other operations in the machine. There are two pairs of storage registers that can be coupled together so that we can handle problems requiring numbers of 46 digits instead of 23. Registers 64 and 65 can be coupled, and registers 68 and 69 can be coupled. There is another storage counter, No. 71, that has an extra property. We can read out the number it holds times 1, or times 10¹², or times 10⁻¹², as may be called for. As a result of this counter, we can do problems requiring 144 registers storing numbers of 11 digits each, instead of 72 registers storing 23 digits each. Bigger statistical problems can be handled, for example.
There are some minor sequences of operations, or subroutines, that can be called for by a single code. The subroutine may be a whole set of additions, subtractions, multiplications, divisions, and choices, having a single purpose: to compute some number by a process of rapid approximation ([see Supplement 2]). There are built-in subroutines for some special mathematical functions: the logarithm of a number to the base 10, the exponential of a number to the base 10, and the sine of a number. ([See Supplement 2].)
There are also 10 changeable subroutines, each of 22 coding lines, which can be called in, when wanted, by the main sequence-control tape or by each other. These subroutines constitute the Subsidiary Sequence Mechanism, and are extremely useful. They have A, B, and C fields just like the main sequence-control, but they are given information by plugging with short lengths of wire instead of by feeding punched paper tape.