On Thu, Sep 24, 2020 at 1:19 PM Paul Winalski 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.