Why have a model?

If the model seems too formal for what's obviously the right way to compute, you might not have experienced some alternatives on computers designed before 1980. In the name of cost or efficiency, there have appeared a variety of features, individually tolerable but collectively daunting. On platforms lacking subnormal numbers, a statement like

    if (x != y) z = 1.0 / (x - y);
could raise the divide-by-zero exception because the difference undeflows to zero. On most such platforms, the exception would terminate processing. The situation was worse with machines on which

    if (x != 0.0) z = 1.0 / x;
could raise the divide-by-zero exception for certain small nonzero (a debatable issue) x because the divider used a less careful test for zero than did the adder, which was used for the comparison. Programmers discovered the fix

    if ((1.0 * x) != 0.0) z = 1.0 / x;
which worked because the multiplier used the same (faulty) test for zero as the divider. But on some machines even multiplication by 1 was risky because it could lop off a low-order 1 bit of the multiplicand, making the expression

    ((1.0 * x) != x)
true. The list goes on. Some problems were so severe the manufacturer fixed them retroactively. On one supercomputer,

    (x * y != y * x)
was true for common values of x and y. On another mainframe, the difference of nearly equal values,

    x - y
could be in error by a factor of 16. These problems were more than customers could bear. The IEEE arithmetic standards underlying all CommonPoint platforms were an attempt to stem the proliferation of these design problems across hundreds of millions of microprocessors.


[Contents] [Previous] [Next]
Click the icon to mail questions or corrections about this material to Taligent personnel.
Copyright©1995 Taligent,Inc. All rights reserved.

Generated with WebMaker