diff options
| author | Marius Strobl <marius@FreeBSD.org> | 2010-04-20 20:47:58 +0000 |
|---|---|---|
| committer | Marius Strobl <marius@FreeBSD.org> | 2010-04-20 20:47:58 +0000 |
| commit | 2669f95457b9136a7c9fa78e879cc53f68799078 (patch) | |
| tree | 008bd766a310a0d9d6236ccda7937063e4aeaf57 /testfloat/systemBugs.txt | |
Initial import of TestFloat 2a.vendor/testfloat/2avendor/testfloat
Obtained from: http://www.jhauser.us/arithmetic/TestFloat.html
Notes
Notes:
svn path=/vendor/testfloat/; revision=206917
svn path=/vendor/testfloat/2a/; revision=206923; tag=vendor/testfloat/2a
Diffstat (limited to 'testfloat/systemBugs.txt')
| -rw-r--r-- | testfloat/systemBugs.txt | 323 |
1 files changed, 323 insertions, 0 deletions
diff --git a/testfloat/systemBugs.txt b/testfloat/systemBugs.txt new file mode 100644 index 000000000000..a0d171a31bb7 --- /dev/null +++ b/testfloat/systemBugs.txt @@ -0,0 +1,323 @@ + +Known Floating-point Bugs Detected by TestFloat + +John R. Hauser +1997 December 15 + + +------------------------------------------------------------------------------- +Introduction + +Several popular systems have bugs that TestFloat is very likely to run +across. The ones I know of are documented here. First off, TestFloat finds +no errors in the following processors/machines: + + AMD 486 DX4's + Sun UltraSPARC 1's and 2's + +On the other hand, bugs are found in these processors/machines: + + Older Intel Pentiums (with the divide bug) + Intel Pentium Pros + Sun SPARCstation 1's and IPX's + Sun SPARCstation 10's + HP Precision Architecture processors, with HP-UX prior to version 10.10 + +For some reason, most of the bugs found involve conversions from floating- +point to integer formats. + +The bugs are shown as actual TestFloat error lines, along with a brief +explanation. The error lines given are not necesarily exhaustive and were +not necessarily output in the order shown. + +This document does not pretend to be an authoritative bug listing for all +commercial processors. The vast majority of processors are absent from this +list because I have never run TestFloat on such machines and I thus have no +knowledge of what bugs TestFloat might find in them. + +The latest version of this file can be found at the Web page `http:// +http.cs.berkeley.edu/~jhauser/arithmetic/testfloat.html'. + + +------------------------------------------------------------------------------- +Older Intel Pentiums (with the divide bug) + +The following conversion problems are found on Pentiums that also suffer +from the infamous floating-point divide bug. These bugs have been fixed on +newer Pentiums. (TestFloat does not find the divide bug.) + +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +floatx80_to_int32 + +-- A few small fractions are treated as though they were zero. + + Errors found in floatx80_to_int32, rounding nearest_even: + 3FFB.8000000000000000 soft: 00000000 ....x syst: 00000000 ..... + 3FFC.8000000000000000 soft: 00000000 ....x syst: 00000000 ..... + 3FFC.C000000000000000 soft: 00000000 ....x syst: 00000000 ..... + BFFB.8000000000000000 soft: 00000000 ....x syst: 00000000 ..... + BFFC.8000000000000000 soft: 00000000 ....x syst: 00000000 ..... + Errors found in floatx80_to_int32, rounding to_zero: + 3FFB.8000000000000000 soft: 00000000 ....x syst: 00000000 ..... + 3FFC.8000000000000000 soft: 00000000 ....x syst: 00000000 ..... + 3FFC.C000000000000000 soft: 00000000 ....x syst: 00000000 ..... + BFFB.8000000000000000 soft: 00000000 ....x syst: 00000000 ..... + BFFC.8000000000000000 soft: 00000000 ....x syst: 00000000 ..... + BFFC.C000000000000000 soft: 00000000 ....x syst: 00000000 ..... + Errors found in floatx80_to_int32, rounding down: + 3FFB.8000000000000000 soft: 00000000 ....x syst: 00000000 ..... + 3FFC.8000000000000000 soft: 00000000 ....x syst: 00000000 ..... + 3FFC.C000000000000000 soft: 00000000 ....x syst: 00000000 ..... + BFFB.8000000000000000 soft: FFFFFFFF ....x syst: 00000000 ..... + BFFC.8000000000000000 soft: FFFFFFFF ....x syst: 00000000 ..... + BFFC.C000000000000000 soft: FFFFFFFF ....x syst: 00000000 ..... + Errors found in floatx80_to_int32, rounding up: + 3FFB.8000000000000000 soft: 00000001 ....x syst: 00000000 ..... + 3FFC.8000000000000000 soft: 00000001 ....x syst: 00000000 ..... + 3FFC.C000000000000000 soft: 00000001 ....x syst: 00000000 ..... + BFFB.8000000000000000 soft: 00000000 ....x syst: 00000000 ..... + BFFC.8000000000000000 soft: 00000000 ....x syst: 00000000 ..... + + 3FFB.8000000000000000 is the fraction 1/16; 3FFC.8000000000000000 is 1/8; + and 3FFC.C000000000000000 is 3/16. Both positive and negative inputs are + affected. + +-- Some (all?) positive floating-point values between 2^32 - 1/2 + (401E.FFFFFFFF00000000) and 2^32 (401F.0000000000000000) are rounded to + zero when the rounding mode is nearest/even or up. + + Errors found in floatx80_to_int32, rounding nearest_even: + 401E.FFFFFFFF80000000 soft: 7FFFFFFF v.... syst: 00000000 ....x + 401E.FFFFFFFFC00001FE soft: 7FFFFFFF v.... syst: 00000000 ....x + 401E.FFFFFFFFF8000000 soft: 7FFFFFFF v.... syst: 00000000 ....x + 401E.FFFFFFFFFEC00000 soft: 7FFFFFFF v.... syst: 00000000 ....x + 401E.FFFFFFFFFF002000 soft: 7FFFFFFF v.... syst: 00000000 ....x + 401E.FFFFFFFFFFC00000 soft: 7FFFFFFF v.... syst: 00000000 ....x + 401E.FFFFFFFFFFE00000 soft: 7FFFFFFF v.... syst: 00000000 ....x + 401E.FFFFFFFFFFFD7FFE soft: 7FFFFFFF v.... syst: 00000000 ....x + 401E.FFFFFFFFFFFFFFFE soft: 7FFFFFFF v.... syst: 00000000 ....x + 401E.FFFFFFFFFFFFFFFF soft: 7FFFFFFF v.... syst: 00000000 ....x + Errors found in floatx80_to_int32, rounding up: + 401E.FFFFFFFF00800000 soft: 7FFFFFFF v.... syst: 00000000 ....x + 401E.FFFFFFFF80000000 soft: 7FFFFFFF v.... syst: 00000000 ....x + 401E.FFFFFFFFEFFFC000 soft: 7FFFFFFF v.... syst: 00000000 ....x + 401E.FFFFFFFFFC000000 soft: 7FFFFFFF v.... syst: 00000000 ....x + 401E.FFFFFFFFFE7FFFFF soft: 7FFFFFFF v.... syst: 00000000 ....x + 401E.FFFFFFFFFFF00000 soft: 7FFFFFFF v.... syst: 00000000 ....x + 401E.FFFFFFFFFFFE0800 soft: 7FFFFFFF v.... syst: 00000000 ....x + 401E.FFFFFFFFFFFF7FFB soft: 7FFFFFFF v.... syst: 00000000 ....x + 401E.FFFFFFFFFFFFFFFE soft: 7FFFFFFF v.... syst: 00000000 ....x + 401E.FFFFFFFFFFFFFFFF soft: 7FFFFFFF v.... syst: 00000000 ....x + +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +------------------------------------------------------------------------------- +Intel Pentium Pros + +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +floatx80_to_int32 + +-- The inexact flag is sometimes raised instead of the invalid flag for + floating-point inputs under -(2^32) (C01F.0000000000000000). This bug is + sporadic. It appears to be deterministic but dependent on the sequence + of operations executed. + + Errors found in floatx80_to_int32, rounding nearest_even: + C01F.C000000000000002 soft: 80000000 v.... syst: 80000000 ....x + C021.F00000000000003F soft: 80000000 v.... syst: 80000000 ....x + Errors found in floatx80_to_int32, rounding to_zero: + C021.F00000000000003F soft: 80000000 v.... syst: 80000000 ....x + Errors found in floatx80_to_int32, rounding up: + C01F.C000000000000007 soft: 80000000 v.... syst: 80000000 ....x + C01F.C000000000001000 soft: 80000000 v.... syst: 80000000 ....x + +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +------------------------------------------------------------------------------- +Sun SPARCstation 1's and IPX's + +Some older SPARCstations appear confused about whether underflow tininess is +detected before or after rounding. For conversions from double precision +to single precision, tininess is detected after rounding, while for all +quadruple-precision operations it is detected before rounding. Single- and +double-precision multipies go both ways: + +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +float32_mul, float64_mul + +-- For multiplies, underflow tininess is detected _before_ rounding if one + of the inputs is subnormal, and _after_ rounding otherwise. If tininess + is assumed to be detected before rounding, the following errors are + generated: + + Errors found in float32_mul, rounding nearest_even: + 001.000001 07E.7FFFFE soft: 001.000000 ...ux syst: 001.000000 ....x + 001.000001 87E.7FFFFE soft: 801.000000 ...ux syst: 801.000000 ....x + 001.000002 07E.7FFFFC soft: 001.000000 ...ux syst: 001.000000 ....x + 001.000002 87E.7FFFFC soft: 801.000000 ...ux syst: 801.000000 ....x + 001.000004 07E.7FFFF8 soft: 001.000000 ...ux syst: 001.000000 ....x + Errors found in float32_mul, rounding down: + 001.000001 87E.7FFFFE soft: 801.000000 ...ux syst: 801.000000 ....x + 001.000002 87E.7FFFFC soft: 801.000000 ...ux syst: 801.000000 ....x + 001.000004 87E.7FFFF8 soft: 801.000000 ...ux syst: 801.000000 ....x + 001.000008 87E.7FFFF0 soft: 801.000000 ...ux syst: 801.000000 ....x + 001.000010 87E.7FFFE0 soft: 801.000000 ...ux syst: 801.000000 ....x + Errors found in float32_mul, rounding up: + 001.000001 07E.7FFFFE soft: 001.000000 ...ux syst: 001.000000 ....x + 001.000002 07E.7FFFFC soft: 001.000000 ...ux syst: 001.000000 ....x + 001.000004 07E.7FFFF8 soft: 001.000000 ...ux syst: 001.000000 ....x + 001.000008 07E.7FFFF0 soft: 001.000000 ...ux syst: 001.000000 ....x + 001.000010 07E.7FFFE0 soft: 001.000000 ...ux syst: 001.000000 ....x + Errors found in float64_mul, rounding nearest_even: + 001.0000000000001 3FE.FFFFFFFFFFFFE + soft: 001.0000000000000 ...ux syst: 001.0000000000000 ....x + 001.0000000000001 BFE.FFFFFFFFFFFFE + soft: 801.0000000000000 ...ux syst: 801.0000000000000 ....x + 001.0000000000002 3FE.FFFFFFFFFFFFC + soft: 001.0000000000000 ...ux syst: 001.0000000000000 ....x + 001.0000000000002 BFE.FFFFFFFFFFFFC + soft: 801.0000000000000 ...ux syst: 801.0000000000000 ....x + 001.0000000000004 3FE.FFFFFFFFFFFF8 + soft: 001.0000000000000 ...ux syst: 001.0000000000000 ....x + Errors found in float64_mul, rounding down: + 001.0000000000001 BFE.FFFFFFFFFFFFE + soft: 801.0000000000000 ...ux syst: 801.0000000000000 ....x + 001.0000000000002 BFE.FFFFFFFFFFFFC + soft: 801.0000000000000 ...ux syst: 801.0000000000000 ....x + 001.0000000000004 BFE.FFFFFFFFFFFF8 + soft: 801.0000000000000 ...ux syst: 801.0000000000000 ....x + 001.0000000000008 BFE.FFFFFFFFFFFF0 + soft: 801.0000000000000 ...ux syst: 801.0000000000000 ....x + 001.0000000000010 BFE.FFFFFFFFFFFE0 + soft: 801.0000000000000 ...ux syst: 801.0000000000000 ....x + Errors found in float64_mul, rounding up: + 001.0000000000001 3FE.FFFFFFFFFFFFE + soft: 001.0000000000000 ...ux syst: 001.0000000000000 ....x + 001.0000000000002 3FE.FFFFFFFFFFFFC + soft: 001.0000000000000 ...ux syst: 001.0000000000000 ....x + 001.0000000000004 3FE.FFFFFFFFFFFF8 + soft: 001.0000000000000 ...ux syst: 001.0000000000000 ....x + 001.0000000000008 3FE.FFFFFFFFFFFF0 + soft: 001.0000000000000 ...ux syst: 001.0000000000000 ....x + 001.0000000000010 3FE.FFFFFFFFFFFE0 + soft: 001.0000000000000 ...ux syst: 001.0000000000000 ....x + + If we assume tininess should be detected after rounding, we get the + following errors: + + Errors found in float32_mul, rounding nearest_even: + 000.7FFC00 07F.000400 soft: 001.000000 ....x syst: 001.000000 ...ux + 000.7FFC00 87F.000400 soft: 801.000000 ....x syst: 801.000000 ...ux + 000.7FFE00 07F.000200 soft: 001.000000 ....x syst: 001.000000 ...ux + 000.7FFE00 87F.000200 soft: 801.000000 ....x syst: 801.000000 ...ux + 000.7FFF00 07F.000100 soft: 001.000000 ....x syst: 001.000000 ...ux + Errors found in float32_mul, rounding down: + 000.7FFC00 87F.000400 soft: 801.000000 ....x syst: 801.000000 ...ux + 000.7FFE00 87F.000200 soft: 801.000000 ....x syst: 801.000000 ...ux + 000.7FFF00 87F.000100 soft: 801.000000 ....x syst: 801.000000 ...ux + 000.7FFF80 87F.000080 soft: 801.000000 ....x syst: 801.000000 ...ux + 000.7FFFC0 87F.000040 soft: 801.000000 ....x syst: 801.000000 ...ux + Errors found in float32_mul, rounding up: + 000.7FFC00 07F.000400 soft: 001.000000 ....x syst: 001.000000 ...ux + 000.7FFE00 07F.000200 soft: 001.000000 ....x syst: 001.000000 ...ux + 000.7FFF00 07F.000100 soft: 001.000000 ....x syst: 001.000000 ...ux + 000.7FFF80 07F.000080 soft: 001.000000 ....x syst: 001.000000 ...ux + 000.7FFFC0 07F.000040 soft: 001.000000 ....x syst: 001.000000 ...ux + Errors found in float64_mul, rounding nearest_even: + 000.FFFFFFE000000 3FF.0000002000000 + soft: 001.0000000000000 ....x syst: 001.0000000000000 ...ux + 000.FFFFFFE000000 BFF.0000002000000 + soft: 801.0000000000000 ....x syst: 801.0000000000000 ...ux + 000.FFFFFFF000000 3FF.0000001000000 + soft: 001.0000000000000 ....x syst: 001.0000000000000 ...ux + 000.FFFFFFF000000 BFF.0000001000000 + soft: 801.0000000000000 ....x syst: 801.0000000000000 ...ux + 000.FFFFFFF800000 3FF.0000000800000 + soft: 001.0000000000000 ....x syst: 001.0000000000000 ...ux + Errors found in float64_mul, rounding down: + 000.FFFFFFE000000 BFF.0000002000000 + soft: 801.0000000000000 ....x syst: 801.0000000000000 ...ux + 000.FFFFFFF000000 BFF.0000001000000 + soft: 801.0000000000000 ....x syst: 801.0000000000000 ...ux + 000.FFFFFFF800000 BFF.0000000800000 + soft: 801.0000000000000 ....x syst: 801.0000000000000 ...ux + 000.FFFFFFFC00000 BFF.0000000400000 + soft: 801.0000000000000 ....x syst: 801.0000000000000 ...ux + 000.FFFFFFFE00000 BFF.0000000200000 + soft: 801.0000000000000 ....x syst: 801.0000000000000 ...ux + Errors found in float64_mul, rounding up: + 000.FFFFFFE000000 3FF.0000002000000 + soft: 001.0000000000000 ....x syst: 001.0000000000000 ...ux + 000.FFFFFFF000000 3FF.0000001000000 + soft: 001.0000000000000 ....x syst: 001.0000000000000 ...ux + 000.FFFFFFF800000 3FF.0000000800000 + soft: 001.0000000000000 ....x syst: 001.0000000000000 ...ux + 000.FFFFFFFC00000 3FF.0000000400000 + soft: 001.0000000000000 ....x syst: 001.0000000000000 ...ux + 000.FFFFFFFE00000 3FF.0000000200000 + soft: 001.0000000000000 ....x syst: 001.0000000000000 ...ux + +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +------------------------------------------------------------------------------- +Sun SPARCstation 10's + +Like other SPARCstations, some SPARCstation 10's are inconsistent regarding +underflow tininess, detecting it after rounding for single- and double- +precision operations and before rounding for quadruple-precision operations. +The following bug has also been observed. + +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +float32_to_int32_round_to_zero, float64_to_int32_round_to_zero + +-- Single- and double-precision NaNs are converted to the integer zero. + (The invalid exception flag is raised correctly.) + + Errors found in float32_to_int32_round_to_zero: + 8FF.5D36AC soft: 7FFFFFFF v.... syst: 00000000 v.... + 0FF.7FFFC0 soft: 7FFFFFFF v.... syst: 00000000 v.... + 8FF.7C0000 soft: 7FFFFFFF v.... syst: 00000000 v.... + 0FF.2AB7ED soft: 7FFFFFFF v.... syst: 00000000 v.... + 0FF.03FFFF soft: 7FFFFFFF v.... syst: 00000000 v.... + Errors found in float64_to_int32_round_to_zero: + 7FF.45AD84DB2524A soft: 7FFFFFFF v.... syst: 00000000 v.... + 7FF.CFEE063EE0512 soft: 7FFFFFFF v.... syst: 00000000 v.... + 7FF.89FF03AB7DBA2 soft: 7FFFFFFF v.... syst: 00000000 v.... + 7FF.FFFFFFFFFF800 soft: 7FFFFFFF v.... syst: 00000000 v.... + FFF.68A6410E91BF6 soft: 7FFFFFFF v.... syst: 00000000 v.... + +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +------------------------------------------------------------------------------- +HP Precision Architecture processors, with HP-UX prior to version 10.10 + +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +float32_to_int32_round_to_zero, float64_to_int32_round_to_zero + +-- When the floating-point value is too large, the overflow and inexact + exception flags are raised instead of the invalid flag. + + Errors found in float32_to_int32_round_to_zero: + 89E.000007 soft: 80000000 v.... syst: 80000000 ..o.x + 0A2.000020 soft: 7FFFFFFF v.... syst: 7FFFFFFF ..o.x + 8FA.7C0000 soft: 80000000 v.... syst: 80000000 ..o.x + Errors found in float64_to_int32_round_to_zero: + 7FD.0448700002F1C soft: 7FFFFFFF v.... syst: 7FFFFFFF ..o.x + DAA.F000000000000 soft: 80000000 v.... syst: 80000000 ..o.x + 41E.063DA00005E65 soft: 7FFFFFFF v.... syst: 7FFFFFFF ..o.x + 47E.FFFF800000000 soft: 7FFFFFFF v.... syst: 7FFFFFFF ..o.x + 51F.0000000000004 soft: 7FFFFFFF v.... syst: 7FFFFFFF ..o.x + DDA.0000001FFFFFF soft: 80000000 v.... syst: 80000000 ..o.x + D70.00000000003FF soft: 80000000 v.... syst: 80000000 ..o.x + C7E.0000100000000 soft: 80000000 v.... syst: 80000000 ..o.x + 47E.000000000007F soft: 7FFFFFFF v.... syst: 7FFFFFFF ..o.x + D57.000000000FFFF soft: 80000000 v.... syst: 80000000 ..o.x + + +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + |
