Annotation of researchv10no/cmd/lcc/tst/t2, revision 1.1

1.1     ! root        1: Lest this program stop prematurely, i.e. before displaying
        !             2: 
        !             3:     `END OF TEST',
        !             4: 
        !             5: try to persuade the computer NOT to terminate execution when an
        !             6: error like Over/Underflow or Division by Zero occurs, but rather
        !             7: to persevere with a surrogate value after, perhaps, displaying some
        !             8: warning.  If persuasion avails naught, don't despair but run this
        !             9: program anyway to see how many milestones it passes, and then
        !            10: amend it to make further progress.
        !            11: 
        !            12: Answer questions with Y, y, N or n (unless otherwise indicated).
        !            13: 
        !            14: 
        !            15: Diagnosis resumes after milestone Number 0          Page: 1
        !            16: 
        !            17: Users are invited to help debug and augment this program so it will
        !            18: cope with unanticipated and newly uncovered arithmetic pathologies.
        !            19: 
        !            20: Please send suggestions and interesting results to
        !            21:        Richard Karpinski
        !            22:        Computer Center U-76
        !            23:        University of California
        !            24:        San Francisco, CA 94143-0704, USA
        !            25: 
        !            26: In doing so, please include the following information:
        !            27:        Precision:      double;
        !            28:        Version:        10 February 1989;
        !            29:        Computer:
        !            30: 
        !            31:        Compiler:
        !            32: 
        !            33:        Optimization level:
        !            34: 
        !            35:        Other relevant compiler options:
        !            36: 
        !            37: Diagnosis resumes after milestone Number 1          Page: 2
        !            38: 
        !            39: Running this program should reveal these characteristics:
        !            40:      Radix = 1, 2, 4, 8, 10, 16, 100, 256 ...
        !            41:      Precision = number of significant digits carried.
        !            42:      U2 = Radix/Radix^Precision = One Ulp
        !            43:        (OneUlpnit in the Last Place) of 1.000xxx .
        !            44:      U1 = 1/Radix^Precision = One Ulp of numbers a little less than 1.0 .
        !            45:      Adequacy of guard digits for Mult., Div. and Subt.
        !            46:      Whether arithmetic is chopped, correctly rounded, or something else
        !            47:        for Mult., Div., Add/Subt. and Sqrt.
        !            48:      Whether a Sticky Bit used correctly for rounding.
        !            49:      UnderflowThreshold = an underflow threshold.
        !            50:      E0 and PseudoZero tell whether underflow is abrupt, gradual, or fuzzy.
        !            51:      V = an overflow threshold, roughly.
        !            52:      V0  tells, roughly, whether  Infinity  is represented.
        !            53:      Comparisions are checked for consistency with subtraction
        !            54:        and for contamination with pseudo-zeros.
        !            55:      Sqrt is tested.  Y^X is not tested.
        !            56:      Extra-precise subexpressions are revealed but NOT YET tested.
        !            57:      Decimal-Binary conversion is NOT YET tested for accuracy.
        !            58: 
        !            59: Diagnosis resumes after milestone Number 2          Page: 3
        !            60: 
        !            61: The program attempts to discriminate among
        !            62:    FLAWs, like lack of a sticky bit,
        !            63:    Serious DEFECTs, like lack of a guard digit, and
        !            64:    FAILUREs, like 2+2 == 5 .
        !            65: Failures may confound subsequent diagnoses.
        !            66: 
        !            67: The diagnostic capabilities of this program go beyond an earlier
        !            68: program called `MACHAR', which can be found at the end of the
        !            69: book  `Software Manual for the Elementary Functions' (1980) by
        !            70: W. J. Cody and W. Waite. Although both programs try to discover
        !            71: the Radix, Precision and range (over/underflow thresholds)
        !            72: of the arithmetic, this program tries to cope with a wider variety
        !            73: of pathologies, and to say how well the arithmetic is implemented.
        !            74: 
        !            75: The program is based upon a conventional radix representation for
        !            76: floating-point numbers, but also allows logarithmic encoding
        !            77: as used by certain early WANG machines.
        !            78: 
        !            79: BASIC version of this program (C) 1983 by Prof. W. M. Kahan;
        !            80: see source comments for more history.
        !            81: 
        !            82: Diagnosis resumes after milestone Number 3          Page: 4
        !            83: 
        !            84: Program is now RUNNING tests on small integers:
        !            85: -1, 0, 1/2, 1, 2, 3, 4, 5, 9, 27, 32 & 240 are O.K.
        !            86: 
        !            87: Searching for Radix and Precision.
        !            88: Radix = 2.000000 .
        !            89: Closest relative separation found is U1 = 1.3877788e-17 .
        !            90: 
        !            91: Recalculating radix and precision
        !            92:  confirms closest relative separation U1 .
        !            93: Radix confirmed.
        !            94: The number of significant digits of the Radix is 56.000000 .
        !            95: 
        !            96: Diagnosis resumes after milestone Number 30          Page: 5
        !            97: 
        !            98: Subtraction appears to be normalized, as it should be.
        !            99: Checking for guard digit in *, /, and -.
        !           100:      *, /, and - appear to have guard digits, as they should.
        !           101: 
        !           102: Diagnosis resumes after milestone Number 40          Page: 6
        !           103: 
        !           104: Checking rounding on multiply, divide and add/subtract.
        !           105: Multiplication appears to round correctly.
        !           106: Division appears to round correctly.
        !           107: Addition/Subtraction appears to round correctly.
        !           108: Checking for sticky bit.
        !           109: Sticky bit used incorrectly or not at all.
        !           110: 
        !           111: Does Multiplication commute?  Testing on 20 random pairs.
        !           112:      No failures found in 20 integer pairs.
        !           113: 
        !           114: Running test of square root(x).
        !           115: Testing if sqrt(X * X) == X for 20 Integers X.
        !           116: Test for sqrt monotonicity.
        !           117: sqrt has passed a test for Monotonicity.
        !           118: Testing whether sqrt is rounded or chopped.
        !           119: Square root is neither chopped nor correctly rounded.
        !           120: Observed errors run from 0.0000000e+00 to 5.0000000e-01 ulps.
        !           121: 
        !           122: Diagnosis resumes after milestone Number 90          Page: 7
        !           123: 
        !           124: Testing powers Z^i for small Integers Z and i.
        !           125: ... no discrepancis found.
        !           126: 
        !           127: Seeking Underflow thresholds UfThold and E0.
        !           128: Smallest strictly positive number found is E0 = 2.93874e-39 .
        !           129: Since comparison denies Z = 0, evaluating (Z + Z) / Z should be safe.
        !           130: What the machine gets for (Z + Z) / Z is  2.00000000000000000e+00 .
        !           131: This is O.K., provided Over/Underflow has NOT just been signaled.
        !           132: 
        !           133: Diagnosis resumes after milestone Number 120          Page: 8
        !           134: 
        !           135: 
        !           136: FLAW:  X = 4.04076183095161331e-39
        !           137:        is not equal to Z = 2.93873587705571877e-39 .
        !           138: yet X - Z yields 0.00000000000000000e+00 .
        !           139:     Should this NOT signal Underflow, this is a SERIOUS DEFECT
        !           140: that causes confusion when innocent statements like
        !           141:     if (X == Z)  ...  else  ... (f(X) - f(Z)) / (X - Z) ...
        !           142: encounter Division by Zero although actually
        !           143: X / Z = 1 + 0.375 .
        !           144: The Underflow threshold is 2.93873587705571877e-39,  below which
        !           145: calculation may suffer larger Relative error than merely roundoff.
        !           146: SERIOUS DEFECT:  Range is too narrow; U1^4 Underflows.
        !           147: Since underflow occurs below the threshold
        !           148: UfThold = (2.00000000000000000e+00) ^ (-1.28000000000000000e+02)
        !           149: only underflow should afflict the expression
        !           150:        (2.00000000000000000e+00) ^ (-1.28000000000000000e+02);
        !           151: actually calculating yields: 0.00000000000000000e+00 .
        !           152: This computed value is O.K.
        !           153: 
        !           154: Testing X^((X + 1) / (X - 1)) vs. exp(2) = 7.38905609893065007e+00 as X -> 1.
        !           155: Accuracy seems adequate.
        !           156: Testing powers Z^Q at four nearly extreme values.
        !           157:  ... no discrepancies found.
        !           158: 
        !           159: 
        !           160: Diagnosis resumes after milestone Number 160          Page: 9
        !           161: 
        !           162: Searching for Overflow threshold:
        !           163: This may generate an error.
        !           164: 
        !           165: * * * FLOATING-POINT ERROR * * *
        !           166: Can `Z = -Y' overflow?
        !           167: Trying it on Y = -8.50705917302346159e+37 .
        !           168: Seems O.K.
        !           169: Overflow threshold is V  = 1.70141183460469229e+38 .
        !           170: There is no saturation value because the system traps on overflow.
        !           171: No Overflow should be signaled for V * 1 = 1.70141183460469229e+38
        !           172:                            nor for V / 1 = 1.70141183460469229e+38 .
        !           173: Any overflow signal separating this * from the one
        !           174: above is a DEFECT.
        !           175: 
        !           176: 
        !           177: Diagnosis resumes after milestone Number 190          Page: 10
        !           178: 
        !           179: 
        !           180: What message and/or values does Division by Zero produce?
        !           181:     Trying to compute 1 / 0 produces ...
        !           182: * * * FLOATING-POINT ERROR * * *
        !           183: 
        !           184:     Trying to compute 0 / 0 produces ...
        !           185: * * * FLOATING-POINT ERROR * * *
        !           186: 
        !           187: Diagnosis resumes after milestone Number 220          Page: 11
        !           188: 
        !           189: 
        !           190: The number of  SERIOUS DEFECTs  discovered = 1.
        !           191: The number of  FLAWs  discovered =           1.
        !           192: 
        !           193: The arithmetic diagnosed has unacceptable Serious Defects.
        !           194: 
        !           195: A total of 3 floating point exceptions were registered.
        !           196: END OF TEST.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.