by:   J.H.M. Bonten


==>>Back to main index of numeric formats


First publication: 8 march 2009


-->Return to document header

For number crunching only

This document describes three old computers that were designed especially for number crunching. The only thing these machines can do well is perform a hughe bunch of arithmetic calculations in a period of time much shorter than with the conventional means of their eras.

Since they were not designed for text processing or data-base managment (= data ordering and mining) they lack the user-controlled handling of the individual bits and small groups of one RAMemory-word, although these words are fairly large, 22 bits or much more. To enhance the calculation speed they store and process the numeric values in a binary way.

Their I/O-systems are fairly poor too. So they need an external support system for a good communication with the outside world. This support system has to handle also the long-term background storage (e.g. removable disk or tape) since the computers themselves do not take care for it.

The three machines are the Cray-1, the CDC-6600 and the Zuse Z1, plus their direct successors. Yes indeed, the Zuse machine can be seen as a pre-war number cruncher. Since the Cray-1 applies a lot of parallellism it is called a super-computer.

The direct successors of these three machines are:
   Cray-1   ->   Cray-1A, -1S, -XMP, -YMP
   CDC-6600   ->   Cyber-70, -170
   Zuse Z1   ->   Z3

The I/O support for the Cray machines must be a big 'ordinary' mainframe computer, e.g. an IBM-360 or CDC-6600.  In their turn the CDC machines themselves have got 10 to 24 small built-in peripheral processors to handle the I/O and storage. For the Zuse machines the I/O support is the human user with the pencil and paper.

The numeric formats of the three number crunchers are described below. Several machines that can handle textes and data-bases are described in some other documents in this internet site.

Error handling

All three machines store special values arising from arithmetic operations into the words for the resulting numbers. As a consequence the user's program can postpone an exception action and continue its normal operation. The error will not creep invisibly through the following calculations.and thus produce fake results. They also trsnsfer such a value to the Processor Status Register, so the user can see that an error has occurred.

Back to contents


First publication date: 09 october 2007
First update: 10 october 2008
Last update: 14 october 2008

Machines: Cray-1, 1A, 1S, XMP, YMP


-->Return to document header

General description

In 1976 Seymour Cray introduced the world's first real supercomputer. It had an outstanding shape: round in stead of the usual filing cabinets. Its electrologic circuitry was made mainly of Emissor Coupled Logic (= ECL) together with a lot of line termination resistors of 60 ohm. For the years 1970-s and 1980-s the switching speed of this type of circuitry was very high. It was unsurpassed by the electrologic of any other type.

Besides its enormous performance in number crunching the super computer had some more superlatives. It was unsurpassed in power consumption by devouring 115 kilowatt of electricity. So it needed two 20-tons cooling aggregates installed outside the computer room in order to not get overheated. Since the voltage for the electrologic circuitry is only 5 this circuitry usurped over 20,000 amperes of direct current!  This hughe amount can be distributed only via thick metal bars. Ordinary wires are too thin and would melt down. This direct current is created by twelve power supply units which are located around the CPU+RAM-cylinder. Humans can seat upon these supplies, so the computer became the world's most expensive sofa: ca. 20 million dollars.

These mind-blowing figures show that the computer had been designed for high-speed number crunching. Nevertheless it is not a calculation marvel. Its word size is 'only' 64 bits. The addressable memory space is 8 MBytes. For that time this was a lot, but other machines had a similar space, e.g. the Burroughs 6700 had 6 MByte. The accuracy of the float data is that of the ordinary computers. In these data all bits are visible. The registers inside the arithmetic processor have the length of the words in the memory. They do not have additional bits for storing the intermediate results of the calculations with a higher accuracy. The hardware does not supply double-length floats. For them special software has been written. Also, the computer cannot divide. It only can inverse a number to get its reciprocal value. This value can be used in a multiplication.

Remarkably the coefficient in the humble DEC PDP-11 can represent more digits. And the Intel FPP-8087 applies 11 extra coefficient bits for its intermediate results. Both systems can execute a real division. In modern Cray computers the FPP-8087 arithmetic is applied. Its word definition, IEEE-754, is described in the 'hidden-bit' document in this internet site.

Word structure

Each COMPUTER-word contains 72 bits. These are written in nine 8-bits bytes. Eight of these bytes are organized in four groups of two. These duo-bytes are called 'parcels'. The bits in them are indexed from 0 to 15, from 16 to 31, from 32 to 47, and from 48 to 63.  All 64 bits together form the DATA-word. This word stores the CPU-instructions and the ordinary data. The nineth byte contains the check bits which are indexed from 64 to 71. This byte will not be mentioned here anymore.

The addressable memory space is one million computer words. Thus the space for the instructions and data is one million data words = 4 million parcels = 8 MByte.

A CPU-instruction has the length of one or two parcels. If one, then it can occupy each of the four parcels in a word. If two, the first one also can occupy each of the four word-parcels. The second one is the one immediately next to it. This can be the first parcel of the next word. So for the instructions the word boundaries are not important. But for the data they are.

Each numeric value requires one whole and contiguous data word. When this number is a float then the leftmost parcel contains the sign with the exponent and the other three parcels together contain the coefficient. Actually four different types of numbers can be stored: the integers used for addressing, the integers used for ordinary data (the 'scalar integers'), the float-like integers and the single-length floats.

Since the computer is designed for number crunching and not for text processing or data ordering, it lacks the user-controlled handling of the individual bits, bytes and parcels.inside the data word. So there is no data type specific for text characters. Selection and update of e.g. a byte occurs by shifting and masking the whole memory word. The later models have better facilities. The four numeric types are listed next.

In contrast with the old Cray manuals wherein bit 0 is the most significant bit in this internet document bit 0 is the least significant bit.

Numeric structures


Negative values are in two-complement and overflow is not detected. Consequently the very same bit-pattern can be interpreted in two ways:

-- Unsigned integer --
length of word = 24 bits
bit 23 - 0  =  magnitude

-- Signed integer --
length of word = 24 bits
bit 23      =  sign   ( 0 = '+',  1 = '-' )
bit 22 - 0  =  magnitude

Available operators are: addition, subtraction, multiplication.

When such an integer number is transferred to a 64 bits word, its 24 bits value (sign bit inclusive!) is right adjusted in that word. The upper 40 bits in the word are zeroed. When the transfer occurs from the 64 bits word to the integer number, only the low-order 24 bits are transferred; the upper 40 bits are ignored.


Negative values are in two-complement and overflow is not detected. Consequently the very same bit-pattern can be interpreted in two ways:

-- Unsigned integer --
length of word = 64 bits
bit 63 - 0  =  magnitude

-- Signed integer --
length of word = 64 bits
bit 63      =  sign   ( 0 = '+',  1 = '-' )
bit 62 - 0  =  magnitude

Available operators are: addition, subtraction, bit-by-bit logicals, bit shifts, bit counts.


A float with the exponent bit-pattern filled with zeroes can be treated sometimes as an integer of sign-bit + 48 bits. Negative values are in sign+magnitude.

length of word = 64 bits
bit 63       =  sign   ( 0 = '+',  1 = '-' )
bit 62 - 48  =  0
bit 47 - 0   =  magnitude

Available operator is: multiplication.


The float is in sign+magnitude notation without a hidden bit and with a biased exponent. When negative it is not complemented.

length of word = 64 bits
bit 63       =  sign   ( 0 = '+',  1 = '-' )
bit 62 - 48  =  exponent
bit 47 - 0   =  coefficient
exponent base = 2

Available operators are: addition, subtraction, multiplication, reciprocal approximation.

The coefficient has no hidden bit, so all its bits are visible. When it is not normalized it will become so by the addition of a zero value. It must be normalized before any other arithmetic operation. It is a fraction, so its value goes from 0.5 until 1.0.

In theory two zeroes are possible: +0 = the ordinary value zero = the whole bit pattern (exponent inclusive) filled with zeroes, and -0 which is never made by any arithmetic operator and thus actually never will occur.

Only the half of all exponent bit patterns deliver a legal exponent value. The other half signal an error. In octal:

      exponent property         exponent value (octal)
      -----------------         ----------------------
    float-like integer     =       0  (sometimes)
      exponent range       =  0 or 1  up to  77,777
     underflow indication  =  17,777  or less (error)
      negative range       =  20,000  up to  37,777
      positive range       =  40,000  up to  57,777
      overflow indication  =  60,000  or more (error)
      exponent bias        =  40,000  (= decimal 16384)
      unbiased range       = -20,000  up to  +17,777

Arithmetic data in listing

Machines: Cray-1, 1A, 1S, XMP, YMP

Binary bits

     type            #bits          binary normalized abs.value
    ------     ------------------   ---------------------------
   -floats-    total expon mantis   minimum     maximum(nearly)
floating-point    64   15    48     2^(-1-8192)       2^+8191

  -integers-   total expon mantis   unnormal.min.  max.(nearly)
float-like        64  15x0   48         1             2^+48
unsigned scalar   64    -    64         1             2^+64
signed scalar     64    -    63         1             2^+63
unsigned addres   24    -    24         1             2^+24
signed address    24    -    23         1             2^+23

Decimal values

     type         decimal normalized abs.value     decim.digits
    ------        ----------------------------     ------------
   -floats-          minimum         maximum       float-accur.
floating-point      4.59E-2467      5.45E+2465        14.1

  -integers-       unnormal.min.     maximum       int-#digits
float-like              1           2.81E+14          14.4
unsigned scalsr         1           1.84E+19          19.2
signed scalar           1           9.22E+18          18.9
unsigned address        1           1.67E+8            7.2
signed address          1           8.38E+7            6.9


Cray-1 computer system, Hardware reference manual, nr.2240004, 1977

Back to contents

CDC-6600   and   CYBER's

First publication: 8 march 2009

Machines: CDC-6600, Cyber-70, Cyber-170


-->Return to document header


In the laboratories of Control Data Corporation in the early sixties J.E. Thornton, supported by his boss Seymour Cray, designed a computer for fast calculations. It became the CDC-6600.  He took much care to improve the speed of the arithmetic processor by better designing its logical circuitry. But the computer was not able to communicate well with the outside world. Therefore it had 10 to 24 Peripheral Processors. These were modified 12-bits CDC-160 minicomputers. They will not be discussed here.

The width of the data bus is 60 bits. The address bus is 18 bits wide. With it 256K words could be addressed, i.e a memory area of nearly 2 MByte. At that time it was large, but later it became too small. CDC has never found a nice way to circumpass this shortcoming while keeping the compatibilities with the early machines. Therefore the descendant computers, the Cyber-70 and 170, kept the same problem.

The machine was intended for fast calculations, not for text processing or data base management. So it did not have facilities for selecting and changing a small part of a word other than shifting and masking the bit pattern of the whole word.

Arithmetic types


The CPU-instructions are stored in units of 15 bits, the so-called 'Parcels'. Four of them fit in one memory word. Three arithmetic types are applied: integer, float and double float. The integer type is quite simple: the sign and a coefficient of 59 bits. A negative value is shown in one-complement, not in two-complement. The two zeroes 000... and 111... have been given the same meaning.

Single-precision float

        floating-point number in 60-bits computer word
    59 58 57     48 47       <- bit index ->            0
    |+|-| exponent |            coefficient              |
    |-|+| 10 bits  |              48 bits                |
     |  \                                               /
     |   exponent sign (=se)                binary point
     coefficient sign (=sn)                  (virtual)

The float type consists of a sign, an exponent of 11 bits and a coefficient of 48 bits. The special values 'Undefined' and 'Infinity' can be written in it. Basically both the signed coefficient and the exponent are handled as ordinary signed-integer numbers. When negative they are one-complemented (not: two-complemented). So both they have two zeroes.

More or less the exponent should look like a biased integer value. In order to give it that varnish its sign is inverted to 1='+' and 0='-'.  Thus the operators for comparing the integers can be used also for comparing the floats.

The sign of the coefficient is ordinary. When the whole number is negative then it is inverted as a whole, the exponent included, as if the whole thing were of ordinary integer type. Consequently the bit pattern of the exponent's absolute value may be inverted twice: once when the exponent value is negative and at second when the whole number is negative.

Numerically the coefficient is seen as an integer value too, so the binary point is immediately at its right side. All its bits are visible, so no bit is hidden. Input values do not need to be normalized. Even the operators do not always normalize their output. Nevertheless the processor obeys a normalize command. Then it shifts the coefficient to the left until the leftmost bit is non-zero. The exponent value is adapted correspondingly.

The exponent base is 2, so the coefficient is handled as a row of binary digits. The positive zero 000... and the negative zero 111... have the same meaning.

The exponent serves for storing the two special values. It has two zero values, viz. 1000... and 0111...  (These are its bit patterns when the coefficient is positive.) The positive zero 1000.. is the ordinary zero value. The negative zero 0111.. has got the meaning 'Undefined'. When the exponent has its maximum 1111... irrespective the value of the coefficient then the whole number is said to be Infinite.

The whole number can be zero in two ways: The coefficient is zero or the exponent has its smallest value, i.e. its bit pattern is 0000...  Both zeroes and also the two special values can be given as input to every arithmetic operator. The two zeroes may make the operator to give different results when the other input value is Infinite or Undefined. In the appendix the tables are given about the resulting values when a zero or a special value is entered.

Double-precision float

The double-float type is made of a remarkable construction that other computer manufacturers do not apply. It is seen as the add-summation of two single floats. Therefore it consists of two full-fledged single-float words. In principle the four arithmetic operators can accept single floats only. Actually they do accept doubles, but they handle them as sets of two separate singles. Depending on the contents of the single input-floats they deliver a single or double float as result.

When a double float is delivered then the first word contains the most significant part of the whole number. The second word contains the least significant part. The exponent in this part is given the value of the first part's exponent minus 48.  Thus the coefficient in this part acts as the seamless continuation of the coefficient in the first part. Both coefficients have the binary point at their right side. When the whole number is negative both words are complemented separately.

For example: Many computer manufacturers would store an unnormalized number somehow like this:
    2016 0007312*2445000
The CDC-6600 stores this number actually as:
    2016 0007312* + 1735 2445000*
Remarks about this example:
    * = virtual binary point.
    The coefficients are shortened for better readibility.
    All digits are in octal. They represent 3-bits patterns.
    The leftmost digit embraces the two signs and the first bit of the absolute exponent value.
    1735 + 60 = 2016     See the semi-biased exponent above.
    60 octal = 48 decimal

As stated already, at input both single floats of a double float are handled separately as independent numbers.

Accuracy around zero

One might expect that the protocol of 'value is zero at zero exponent irrespective coefficient' will result in a gap in the set of representable numeric values, similar to the gap the Digital PDP-11 has, as written in the internet document about the hidden bit. For the single precision float this will not, since always the coefficient is allowed to be unnormalized, also when the exponent has the bit-pattern ...0001.  But the double float has a sudden loss of accuracy, as shown now.

The construction of the double float as summation of two single floats has a weird consequence. When the bit pattern of the first exponent is less than 48, then the pattern in the second exponent should be less than zero, which is impossible. Then that exponent is made zero Nevertheless the coefficient of the second number receives the right value, as if the exponent were below zero.

When in the second number the exponent is zero then that number is said to be zero. Consequnetly the whole number is shown in single-precision accuracy. So when the exponent of the first number is 49 to 96, then the absolute precision is much better than when that exponent is 48 or less!  This is a weakened form of the zero-gap the Digital PDP-11 has.

That problem would have been solved when in the second number the exponent were kept on ...0001 and its coeffcient were made unnormalized. Then the absolute precision would be the same for all first exponent's values lower than 49, and the relative precision would deteriorate smoothly when that exponent is lowered. Alas, the machine does not work that way.

Numeric structures


bit 59      = sign (0='+'. 1='-')
bit 58 - 0  = absolute value

Negative values are written in 1-complement
Allowed operations are ADD and SUBTRACT


bit 59 = sn = sign of whole number (0='+'. 1='-')
bit 58 = se = sign of exponent (1='+'. 0='-' [see text])
bit 57 - 48 = absolute value of exponent
bit 47 - 0  = absolute value of coefficient

Two zeroes: coefficient = 00000...  [complemented when sn = 1]
            se+exponent = 0 000... = -1023      [idem]
Infinity;   se+exponent = 1 111... = +1023      [idem]
Undefined:  se+exponent = 0 111... = -0         [idem]

Coefficient is integer number without fraction
Negative exponent values are written in 1-complement
Negative values of the whole number are written in 1-complement
Allowed operations are ADD, SUBTRACT, NULTIPLY and DIVIDE


The double float consists of two independent single floats
The first word contains the MSPart
The second word contains the LSPart
Generally:   LSP-Exponent = MSP-Exponent - 48

Arithmetic data in listing

Machines: CDC-6600, Cyber-70, Cyber-170

Binary bits

data type          #bits          binary normalized abs.value
             total expon coeff     minimum      maximum(nearly)
single float   60  1+10   48     2^(-1022+47)      2^(1022+48)
double float  120  2*11   96    [2^(-1022+48+47)]  2^(1022+48)
integer        60    -    59        2^+58            2^+59

Decimal values

data type         decimal normalized abs.value    float-accur.
                    minimum         maximum     or int-#digits
single float       3.14E-294       1.26E+322         14.1
double float     [ 8.82E-280 ]     1.26E+322         28.5
integer            2.88E+17        5.76E+17          17.7

Un-normalized minima

data type      minimum absolute non-zero value
                    binary          decimal
single float       2^-1022         2.23E-308
double float       2^-1022         2.23E-308
integer               1                1

Appendix about the special values

Zeroes and Special values

     value:   bit pattern for positive number:
      0.0   =   0  v  vvv..vvv   000....000
      0.0   =   0  0  000..000
      INF   =   0  1  111..111
      UND   =   0  0  111..111

    xx.. = any bit pattern without any restriction
    vv.. = any bit pattern except 000...,  111... and 0111...
    For negative numbers all bit patterns are 1-complemented.

Arithmetic calculation with special values

These tables are based on the CDC-manuals. Herein:
N = any float number with non-special and non-zero exponent
O = number with zero exponent (why not zero coefficient also?)
I = infinity
U = undefined

    Result = Left + Right

    right operand ->  N   O  +I  -I   U
     left operand |
              N   |   N   N  +I  -I   U
              O   |   N   O  +I  -I   U
             +I   |  +I  +I  +I   U   U
             -I   |  -I  -I   U  -I   U
              U   |   U   U   U   U   U

    Result = Left + (-Right)

    Result = Left * Right

    right operand ->  N   O   I   U
     left operand |
              N   |   N   O   I   U
              O   |   O   O   U   U
              I   |   I   U   I   U
              U   |   U   U   U   U

    Result = Left / Right

    right operand ->  N   O   I   U
     left operand |
              N   |   N   I   O   U
              O   |   O   U   O   U
              I   |   I   I   U   U
              U   |   U   U   U   U


Back to contents


First publication: 8 march 2009
Links improved: 28 may 2009

Machines: Z1 and Z3 (and sparsely their followers)


-->Return to document header

Design ahead of time

In the midst of the years 30 the German aeroplane engineer Konrad Zuse got tired and bored by the tedious calculations that had to be done to find the right shape for a wing. So he designed the world's first programmable computer, named Z1.  It got completed in 1938 and operated fully mechanically. Its successor, the Z3 completed in 1941, worked electromechanically (= with relays). Logically both machines were fairly equal, except that the square root function had been added to the Z3.

Of course both machines were logically very simple and poor. The only thing they could do is perform the four or five numeric operations +, -, *, / and sqrt. Nevertheless they are very modern in some aspects, like:
- The modules of the modern computers can already be discerned, like the input keyboard, the output display, the instruction decoder, the random access memory (= RAM), and so on.
- The machines work binarily, which was a revolution in the time that all calculators worked decimally.
- Their arithmetic processor already is a full-fledged floating point processor. This processor even has exception handling.
- The arithmetic processor also applies floating-point numbers, which already are stored in hidden-bit notation.
- Although the machines compute binarily they accept and display the numeric values decimally.
- The instruction processor applies pipelining. During the progress of an instruction the next one is fetched and already started for execution.
- The width of the bus for data transport between the processor and the RAM lies in the range of the bus widths used in the present days, viz. 22 bits.
- The registers inside the arithmetic processor have two to five extra bits to increase the accuracy of the temporary results. Thus the main register R1 has 24 bits. Many computers of 20 to 40 years later date still lacked the extra bits.

Note that all these things have been invented by Konrad Zuse himself and a few of his direct friends! They also made a smaller hybrid (= memory is mechanical, processor has relays) demonstration machine, the Z2, which has 16 bits. It processed integers only.

In order to become not too complex and too big the Z1 and Z3 lacked the integer numbers, the address calculation, the call for subprograms and the conditional clause. Their RAM consisted of 64 (note: not 64K or 64M or 64G) memory words of 22 bits. Only data were stored in it. The user's program was stored on a 5+3=8 bits wide punch tape. This program could address and access each word in the RAM, but it could not access directly the registers in the arithmetic processor.

During the Sexond World War the three machines, Z1, Z2 and Z3, together with their documentation and photographs got destroyed totally by the shameful allied bomb raids that destroyed most of the German historical city centers and thus whiped out a lot of Europe's old history. Later on Konrad Zuse made replicas that approximate the Z1 and Z3, by looking around in his own brain memory. The Z2 is lost forever.

After the war Konrad Zuse completed the successor of the Z3, the Z4.  It is hybrid also and has 64 RAM-words also. But its bus width is 32 bits, already the same of a modern-day PC.  It became the world's second commercially sold computer and the first in Europe. It has served for nine(!) years in Switzerland and France. This computer and some later Zuse computers still exist in museums. Some of them are even kept in operation!

Nevertheless, due to the war and also due to its political and social aftermath all Zuse's inventions were in vain. Later on they were reinvented by other people in the allied countries, mainly in the UK and USA.  His definition of the floating-point numbers even got out of use already before the definitions by DEC and IEEE came into existence, although his definition is as good as that by DEC.  Clearly the war has slowed down the development of the computers!

Some words used by Konrad Zuse are in modern-day English:
Semilogarithmic notation = Floating-point notation
German: Dualstelle = English: Place for a dual-value = Bit

Word structure

Because of the allied air bombardments a lot of information has been lost forever. As a consequence the reconstruction of the early Zuse computers Z1 and Z3 has some flaws and shows even some contradictions. So the word structure I describe here is the reconstruction which I assume as the most probable. I will continue to look for the really right information.

In the Z1 and Z3 a RAM-word contains one bit for the sign of the coefficient, seven bits for the exponent and 14 bits for the coefficient. In the processor's main register R1 the coefficient is two bits longer. The other registers also have a longer exponent. The RAM-words in the Z4, Z5 and Z11 have the same exponent, but a longer coefficient.

The coefficient is structured in the same way as in the IEEE-754 definition for binary numbers. The hidden bit is its integer part and the visible bits form the fractional part. Thus its value ranges from 1.0 until 2.0.  Together with its sign it forms a sign+magnitude notation.

The exponent is different. Here the available information shows contradictions. The exponent is stored either in two-complement notation or in sign+magnitude, although not in excess-bias. For me the sign+magnitude notation seems to be the most likely.

When the sign+magnitude notation holds the exponent in the RAM-words and in the main register R1 goes from -63 upto +63 and has two zeroes. The positive maximum +63 represents the special number Infinity, irrespective the value of the coefficient.

The positive zero is the ordinary zero exponent. Then the value of the whole number ranges from 1.0 until 2.0.  The negative zero is interpreted as -64 and sets the whole numeric value to 0.0, irrespective the value of the coefficient. The latter implies that the unnormalized values are not used. Consequently around the 0.0 the series of numeric values shows a gap similar to that the DEC PDP-11 and VAX have.

The special value Undefined can result from an arithmetic operation, but it is not written in the resulting number. It is noted only in a kind of 'processor status register'. This register is displayed on the user's console, e.g. by lamps.

Thus altogether the Zuse definition for floating-point numbers results in:
- The coefficient is written in hidden-bit notation and has a value range from 1.0 until 2.0.
- The exponent is given in sign+magnitude notation. The negative zero gets a special meaning.
- When the exponent has this bit pattern 10000..., then the value of the whole number is 0.0, irrespective the value of the coefficient.
- Infinity is the only special value in a number. It occupies the bit pattern for the maximum exponent 01111..., irrespective the value of the coefficient.
- The special value Undefined (or: NaN) is reported in the processor status register only.
- In the Z1 and the Z3 the minimim non-zero value of the whole number is 2^-63 = 1.09E-19, and its maximum value approximates 2*2^62 = 0.92E+19.

In several machines Konrad Zuse made in post-war Germany he applied the same definition for the numbers and even the same size of 7 bits for the exponent. So the minimum and maximum value stayed unchanged. He increased the accuracy only. For example (with the length of the RAM-word, the exponent and visible part of the coefficient in bits):

machine    ----- # b i t s -----    guaranteed    remarks:
         wordsize  expon  vis.coeff  accuracy
Z1,Z3(R1)   24       7       16        4.8     in register R1
Z1,Z3       22       7       14        4.2
   Z4       32       7       24        7.2
   Z5       35       7       27        8.1
  Z11       38       7       30        9.0     insecure figures
    minimum numerical non-zero value = 1.085E-19
    maximum numerical value          = 0.922E+19

The numerical data about the word structure in the Z1 and Z3, the extreme values and the special values are listed also in the document in this internet site that describes extensively the hidden-bit notations in the computers of many brands. There also examples are given of some values and their bit patterns. The concept of the guaranteed accuracy is described in another document in the internet site.

Instruction set

Of course the instruction set of the Z1 and Z3 is very simple. It contains only eight or nine 8-bits opcodes. Nevertheless its basic principle is very modern. The opcodes and their mnemonics are:


  arithmetic    multiply               LM       01 001 000
                divide                 LI       01 010 000
                square root (Z3 only)  LW       01 011 000
                add                    LS-1     01 100 000
                subtract               LS-2     01 101 000

  in-/output    read keyboard          LU       01 110 000
                display result         LD       01 111 000

  memory        store into RAM         PS-z     10 zzz zzz
                read from RAM          PR-z     11 zzz zzz

  Legenda:  zzzzzz is the adress of the selected memory word

Most instructions are centered around register R1.  Some of them use register R2 for output or as the second input. The meaning of each one and its number of clock cycles is:

DESCRIPTION             MEANING            #CYCLES depending on

multiply          R1 x R2 => R1             16
divide            R1 / R2 => R1             18
square root      sqrt(R1) => R1             20
add               R1 + R2 => R1             3
subtract          R1 - R2 => R1             4 or 5    result

read keyboard    keyboard => R1             9 to 41   exponent
display result    display <= R1; clear R1   9 to 41   exponent

store into RAM     zzzzzz <= R1; clear R1   0 or 1    piping(?)
read from RAM      zzzzzz => R1 or R2       1

Clearing the register R1 implies filling it with the zero value. When R1 is clear then the read-from-RAM instruction fills R1 and does not affect R2, otherwise it fills R2 and does not affect R1.

How to use the computer

Like a modern PC the machine has a keyboard and a screen. The keyboard contains the keys for entering the numeric values (one at a time) and for controlling the operation. The screen consists of lamps for displyaing the numeric values (one at a time) and for showing a kind of 'processor status register'. This register enables the user to detect whether an exception has occurred during a calculation.

Although the computer stores and processes the numerical data in binary mode only, it accepts and displays them in decimal mode only. Both the keyboard and the display communicate via one number in floating-point mode. The coefficient is a signed integer of four or five digits and the exponent is a signed integer of one digit. Thus the range of values this I/O system can handle is smaller than the range of values the computer can handle in its binary intestines. Of course Zuse's post-war computers had a more versatile I/O.

The machine has a built-in hardware device that controls the conversion between the binary and decimal representation. That device uses the same arithmetic the ordinary calculations do. So it blurs the contents of the CPU-registers.

Actually the keyboard contains the keys for the decimal digits of the coefficient, those for the digit of the exponent, some keys for general contol, a key for each of the eight(Z1) or nine (Z3) instructions, and six binary keys for the memory address. As the decimal period is not needed it is absent.

The computer can be used as a simple hand-held calculator. In this mode besides entering the numeric values the user must enter the instructions and the addresses by pressing their keys. He has to enter the numbers and operators in the reverse Polish notation.

The computer has a paper-tape punch facility. When in the hand-held mode every entered operation and address can be copied onto a paper tape immediately. The user commands the puncher by pressing one of the general-operation keys. By this way he makes a program for an automatic calculation sequence.

Later on the user can insert the paper-tape into the tape reader and command the computer to read this tape and execute its program automatically. Then he only needs to enter new numeric values and to accept the displayed values. The two I/O instructions LU and LD halt the machine so that he has enough time to enter a number or write the result down onto paper. He 'un-halts' the machine by pressing a kind of OK-key.

Thus by setting some general-control switches the computer can be used either fully interactively or in a kind of batch mode. In contrast with the modern computers it uses the tape and the RAMemory in a very distinct way. Numeric data can be stored in the memory only, whilst the instructions and memory addresses can be stored on tape only.


Back to contents