PDP-8 floating point numbers

I'm trying to find a single clear statement of the limits to the numbers represented in the PDP-8's three-word format.

I found the original documents on this, but they are, ahem, not exactly forthright with this information. Page 3.10 shows the format with the exponent in the first word and the mantissa in the next two, but the exact format of the exponent isn't revealed (or I missed it), and any "dead numbers" aren't mentioned either (like flags).

Does anyone know the actual limits?

• It says the exponent is a 2's complement signed integer. Is that not a sufficient specification? If by "dead numbers" and "flags" you mean things like we would call NaNs or F.P. modes these days I think you're overestimating the sophistication of the F.P. packages on these early, dinky, minicomputers. Commented Jan 10 at 17:44

The format is pretty basic, so much so that it's easy to miss the description.

• The exponent is simply a signed 12-bit integer. There is no bias mentioned, so it's capable of representing very large and very small numbers for a 36-bit format.
• The mantissa is a 24-bit signed integer, interpreted as a signed fraction in the range -1.0 to 1.0. It is usually normalised, so that its absolute value is in the range 1.0 to 0.5, but un-normalised values (probably) aren't illegal.

The examples on page 3.5, of +2.0 (0002/2000/0000) and -1.0 (0001/6000/0000) fit this reading. There are no NaNs or other special cases, although there are two error reports: Illegal Input, reported in location 60, and Divide by Zero/Square Root of Negative, reported in location 61.

It's much less sophisticated than the VAX formats, but it's considerably earlier, and the PDP-8 was a very simple machine. It's fairly typical for early 1960s formats, and avoids the errors of IBM hexadecimal floating point.

The method of driving the package from assembly language, by calling the the entry point and having it interpret "op codes" created by assembler macros, was widely used. I first encountered it in early 1984 in the Robo BitStik source code, but it's fairly obvious to any experienced assembler programmer.

• Sophistication was not something the PDP-8 could reasonably implement. Commented Jan 10 at 17:59
• That's as I would as well read the document. A plain 12 bit exponent (1 bit sign) plus a 24 bit signed value. This is supported by the example of +2.0 (0002/2000/0000) and -1.0 (0001/6000/0000) on page 3.5. Might be useful to add this example to your answer. It doesn't handle 'special' stuff. The only exceptions are errors reported in location 60 (Illegal Input) and 61 (Divide by zero/negative square root) Commented Jan 10 at 18:06
• The mantissa is a signed fraction in the interval [-1.0, 1.0) and if normalized will always be >= 0.5 (or <= -0.5 and != -1.0), but both nornalized and unnormalized number are allowed (so there are multiple representations of the same number.) Commented Jan 11 at 9:09
• @RalfKleberhoff -- that's a mantissa of .999999826533 (approximately) and an exponent of 2, so that's about 3.9999993 Commented Jan 11 at 10:54
• @JohnDoty I liked the unsophistication of the PDP-8. I was in high schoo and it was the first computer I worked on, and I could assemble/disassemble code in my head. Commented Jan 11 at 16:17