On Thu, Sep 24, 2020 at 1:19 PM Paul Winalski <paul.winalski@gmail.com> wrote:

Or separate-sign numerical representations, for that matter, such as
the IBM 1620 had.  And packed decimal on the S/360/370 and the VAX.
Negative zero in packed decimal is responsible for a lot of the
"computerized bill for $0.00" bugs that were rife in the 1960s.

IEEE floats are still sign-magnitude, for that matter, both the binary ones and the little-used decimal ones, which is why MAX_FLOAT and MAX_DOUBLE are the same in both positive and negative directions.

I once had to deal with some mainframe data that had been transferred to our PDP-11 or Vax (not sure which), and I noticed right away that some of the allegedly numeric data had a non-digit immediately following and one fewer significant digit than the rest.  A little digging in my memory (I think this was before I got access to the Internet in 1985 or so), plus a little experimentation, established that these were trailing-overpunched-sign numbers that had been mechanically translated from EBCDIC to ASCII.  So on the principle of "If a problem is not interesting, generalize it until it is", I wrote a little filter that looked for such numbers in its input and rewrote them as leading-separate-sign (i.e. the Usual Way), copying everything else.  Unfortunately the source is long since lost, but I wouldn't write it in C today anyway.