# Edison paranoia output

Joel Sherrill joel.sherrill at oarcorp.com
Thu Dec 11 18:09:55 UTC 2014

```Hi

Jeff sent this to me and I wanted to make sure it got posted to
the mailing list. paranoia reports flaws in the math.

I don't know how this compares to the native gcc on the Linux
distributed with the Edison.

*** BEGIN OF TEST PARANOIA ***

paranoia version 1.1 [cygnus]

Program is now RUNNING tests on small integers:

TEST: 0+0 != 0, 1-1 != 0, 1 <= 0, or 1+1 != 2

PASS: 0+0 != 0, 1-1 != 0, 1 <= 0, or 1+1 != 2

TEST: 3 != 2+1, 4 != 3+1, 4+2*(-2) != 0, or 4-3-1 != 0

PASS: 3 != 2+1, 4 != 3+1, 4+2*(-2) != 0, or 4-3-1 != 0

TEST: -1+1 != 0, (-1)+abs(1) != 0, or -1+(-1)*(-1) != 0

PASS: -1+1 != 0, (-1)+abs(1) != 0, or -1+(-1)*(-1) != 0

TEST: 1/2 + (-1) + 1/2 != 0

PASS: 1/2 + (-1) + 1/2 != 0

TEST: 9 != 3*3, 27 != 9*3, 32 != 8*4, or 32-27-4-1 != 0

PASS: 9 != 3*3, 27 != 9*3, 32 != 8*4, or 32-27-4-1 != 0

TEST: 5 != 4+1, 240/3 != 80, 240/4 != 60, or 240/5 != 48

PASS: 5 != 4+1, 240/3 != 80, 240/4 != 60, or 240/5 != 48

-1, 0, 1/2, 1, 2, 3, 4, 5, 9, 27, 32 & 240 are O.K.

Closest relative separation found is U1 = 5.4210109e-20 .

confirms closest relative separation U1 .

TEST: Radix is too big: roundoff problems

PASS: Radix is too big: roundoff problems

TEST: Radix is not as good as 2 or 10

PASS: Radix is not as good as 2 or 10

TEST: (1-U1)-1/2 < 1/2 is FALSE, prog. fails?

ERROR: Severity: FAILURE:  (1-U1)-1/2 < 1/2 is FALSE, prog. fails?.

PASS: (1-U1)-1/2 < 1/2 is FALSE, prog. fails?

TEST: Comparison is fuzzy,X=1 but X-1/2-1/2 != 0

PASS: Comparison is fuzzy,X=1 but X-1/2-1/2 != 0

The number of significant digits of the Radix is 64.000000 .

TEST: Precision worse than 5 decimal figures

PASS: Precision worse than 5 decimal figures

TEST: Subtraction is not normalized X=Y,X+Z != Y+Z!

PASS: Subtraction is not normalized X=Y,X+Z != Y+Z!

Subtraction appears to be normalized, as it should be.

Checking for guard digit in *, /, and -.

TEST: * gets too many final digits wrong.

PASS: * gets too many final digits wrong.

TEST: Division lacks a Guard Digit, so error can exceed 1 ulp

or  1/3  and  3/9  and  9/27 may disagree

PASS: Division lacks a Guard Digit, so error can exceed 1 ulp

or  1/3  and  3/9  and  9/27 may disagree

TEST: Computed value of 1/1.000..1 >= 1

PASS: Computed value of 1/1.000..1 >= 1

TEST: * and/or / gets too many last digits wrong

PASS: * and/or / gets too many last digits wrong

TEST: - lacks Guard Digit, so cancellation is obscured

ERROR: Severity: SERIOUS DEFECT:  - lacks Guard Digit, so cancellation
is obscured.

PASS: - lacks Guard Digit, so cancellation is obscured

Checking rounding on multiply, divide and add/subtract.

TEST: X * (1/X) differs from 1

PASS: X * (1/X) differs from 1

* is neither chopped nor correctly rounded.

/ is neither chopped nor correctly rounded.

Sticky bit used incorrectly or not at all.

TEST: lack(s) of guard digits or failure(s) to correctly round or chop

(noted above) count as one flaw in the final tally below

ERROR: Severity: FLAW:  lack(s) of guard digits or failure(s) to
correctly round or chop

(noted above) count as one flaw in the final tally below.

PASS: lack(s) of guard digits or failure(s) to correctly round or chop

(noted above) count as one flaw in the final tally below

Does Multiplication commute?  Testing on 20 random pairs.

No failures found in 20 integer pairs.

Running test of square root(x).

TEST: Square root of 0.0, -0.0 or 1.0 wrong

PASS: Square root of 0.0, -0.0 or 1.0 wrong

Testing if sqrt(X * X) == X for 20 Integers X.

Test for sqrt monotonicity.

ERROR: Severity: DEFECT:  sqrt(X) is non-monotonic for X near
2.0000000e+00 .

Testing whether sqrt is rounded or chopped.

Square root is neither chopped nor correctly rounded.

Observed errors run from -5.5000000e+00 to 5.0000000e-01 ulps.

TEST: sqrt gets too many last digits wrong

ERROR: Severity: SERIOUS DEFECT:  sqrt gets too many last digits wrong.

PASS: sqrt gets too many last digits wrong

Testing powers Z^i for small Integers Z and i.

ERROR: Severity: DEFECT:  computing

(1.30000000000000000e+01) ^ (1.70000000000000000e+01)

yielded 8.65041591938133811e+18;

which compared unequal to correct 8.65041591938133914e+18 ;

they differ by -1.02400000000000000e+03 .

Errors like this may invalidate financial calculations

involving interest rates.

Similar discrepancies have occurred 5 times.

Seeking Underflow thresholds UfThold and E0.

Smallest strictly positive number found is E0 = 0 .

ERROR: Severity: FAILURE:  Either accuracy deteriorates as numbers

approach a threshold = 0.00000000000000000e+00

coming down from 0.00000000000000000e+00

or else multiplication gets too many last digits wrong.

The Underflow threshold is 0.00000000000000000e+00,  below which

calculation may suffer larger Relative error than merely roundoff.

Since underflow occurs below the threshold

UfThold = (2.00000000000000000e+00) ^ (-inf)

only underflow should afflict the expression

(2.00000000000000000e+00) ^ (-inf);

actually calculating yields: 0.00000000000000000e+00 .

This computed value is O.K.

Testing X^((X + 1) / (X - 1)) vs. exp(2) = 7.38905609893065041e+00 as X
-> 1.

ERROR: Severity: DEFECT:  Calculated 1.00000000000000000e+00 for

(1 + (0.00000000000000000e+00) ^ (inf);

differs from correct value by -6.38905609893065041e+00 .

This much error may spoil financial

calculations involving tiny interest rates.

Testing powers Z^Q at four nearly extreme values.

... no discrepancies found.

Searching for Overflow threshold:

This may generate an error.

Can `Z = -Y' overflow?

Trying it on Y = -inf .

finds a ERROR: Severity: FLAW:  -(-Y) differs from Y.

Overflow threshold is V  = -inf .

Overflow saturates at V0 = inf .

No Overflow should be signaled for V * 1 = -inf

nor for V / 1 = -inf .

Any overflow signal separating this * from the one

above is a DEFECT.

ERROR: Severity: FAILURE:  Comparisons involving +--inf, +-inf

and +-0 are confused by Overflow.

ERROR: Severity: SERIOUS DEFECT:    X / X differs from 1 when X = -inf

instead, X / X - 1/2 - 1/2 = nan .

ERROR: Severity: SERIOUS DEFECT:    X / X differs from 1 when X =
0.00000000000000000e+00

instead, X / X - 1/2 - 1/2 = nan .

What message and/or values does Division by Zero produce?

Trying to compute 1 / 0 produces ...  inf .

Trying to compute 0 / 0 produces ...  nan .

The number of  FAILUREs  encountered =       3.

The number of  SERIOUS DEFECTs  discovered = 4.

The number of  DEFECTs  discovered =         3.

The number of  FLAWs  discovered =           2.

The arithmetic diagnosed has unacceptable Serious Defects.

Potentially fatal FAILURE may have spoiled this program's subsequent
diagnoses.

END OF TEST.

*** END OF TEST PARANOIA ***

EXECUTIVE SHUTDOWN! Any key to reboot...

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/users/attachments/20141211/b69ca94d/attachment-0001.html>
```