2016 Update
This commit is contained in:
parent
948b86eafa
commit
dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions
|
|
@ -0,0 +1,8 @@
|
|||
REAL*8 BAD,NaN !Sometimes a number is not what is appropriate.
|
||||
PARAMETER (NaN = Z'FFFFFFFFFFFFFFFF') !This value is recognised in floating-point arithmetic.
|
||||
PARAMETER (BAD = Z'FFFFFFFFFFFFFFFF') !I pay special attention to BAD values.
|
||||
CHARACTER*3 BADASTEXT !Speakable form.
|
||||
DATA BADASTEXT/" ? "/ !Room for "NaN", short for "Not a Number", if desired.
|
||||
REAL*8 PINF,NINF !Special values. No sign of an "overflow" state, damnit.
|
||||
PARAMETER (PINF = Z'7FF0000000000000') !May well cause confusion
|
||||
PARAMETER (NINF = Z'FFF0000000000000') !On a cpu not using this scheme.
|
||||
|
|
@ -0,0 +1,78 @@
|
|||
Cause various arithmetic errors to see what sort of hissy fit is thrown.
|
||||
REAL X2,X3,X4,Y4,XX,ZERO
|
||||
INTEGER IX4,IY4
|
||||
EQUIVALENCE (X4,IX4),(Y4,IY4) !To view bits without provoking special fp handling.
|
||||
REAL*4 NaN4
|
||||
PARAMETER (NaN4 = Z'FFC00000') !FFFFFFFF
|
||||
c PARAMETER (NaN4 = Z'FFFFFFFF') !FFFFFFFF
|
||||
REAL*8 NaN8,X8(5),Y8,INF8
|
||||
PARAMETER (NaN8 = Z'FFF8000000000000') !FFFFFFFF
|
||||
c PARAMETER (NaN8 = Z'FFFFFFFFFFFFFFFF')
|
||||
LOGICAL LX(5)
|
||||
INTEGER I
|
||||
X4 = NaN4
|
||||
WRITE (6,1) X4,IX4
|
||||
1 FORMAT ("X4 =",F12.4,' Hex ',Z8)
|
||||
WRITE (6,*) "Test X4 .EQ. Bad? ",X4.EQ.NaN4
|
||||
WRITE (6,*) "Test X4 .NE. Bad? ",X4.NE.NaN4
|
||||
WRITE (6,*) "Test IsNaN(X4) ",ISNAN(X4)
|
||||
WRITE (6,*) "Test Abs(bad) ",ABS(X4)
|
||||
c WRITE (6,*) "Test Exp(bad)",EXP(X4)
|
||||
Y8 = HUGE(Y8)
|
||||
WRITE(6,*) "Huge",Y8,LOG(Y8)
|
||||
Y8 = LOG(Y8)
|
||||
WRITE (6,*) "Hic",EXP(Y8)
|
||||
|
||||
X2 = 0
|
||||
X3 = 0
|
||||
ZERO = 0
|
||||
XX = 666.66
|
||||
X2 = XX + X4
|
||||
WRITE (6,*) "Test x + BAD ",X2
|
||||
WRITE (6,*) "Test 0/0 ",X3/ZERO
|
||||
WRITE (6,*) "Test 1/0 ",1/ZERO
|
||||
WRITE (6,*) "Test-1/0 ",-1/ZERO
|
||||
X2 = MIN(XX,X4)
|
||||
WRITE (6,*) "Test min(x,Bad) ",X2
|
||||
WRITE (6,*) "Test min(x,NaN4)",MIN(XX,NaN4)
|
||||
c WRITE (6,*) "Test mod(x,Bad) ",MOD(XX,X4)
|
||||
c WRITE (6,*) "Test mod(Bad,x) ",MOD(X4,XX)
|
||||
c WRITE (6,*) "Test mod(x,0) ",MOD(XX,Z)
|
||||
c WRITE (6,*) "Sqrt(Bad)",SQRT(X4)
|
||||
|
||||
DO I = 1,0,-1 !for sqrt(-1), a snarl.
|
||||
X4 = I
|
||||
X4 = X4/FLOAT(I)
|
||||
Y4 = SQRT(FLOAT(I))
|
||||
WRITE (6,10) I,I,X4,IX4,I,Y4,IY4
|
||||
10 FORMAT (I3,"/",I3," gives",F9.5," Hex ",Z8,
|
||||
1 ", Sqrt(",I3,") gives",F9.5," Hex ",Z8)
|
||||
END DO
|
||||
|
||||
Contemplate double precision.
|
||||
WRITE (6,*)
|
||||
WRITE (6,*) "Problems with IsNaN and arrays..."
|
||||
DO I = 1,5
|
||||
X8(I) = I
|
||||
END DO
|
||||
X8(3:4) = NaN8
|
||||
WRITE (6,*) "X=",X8
|
||||
WRITE (6,*) "X(2:4)=",X8(2:4)
|
||||
WRITE (6,*) "isnan(x(2:4))",ISNAN(X8(2:4))
|
||||
WRITE (6,*) "isnan(x(2))..(4))",ISNAN(X8(2)),ISNAN(X8(3)),
|
||||
1 ISNAN(X8(4))
|
||||
WRITE (6,*) "abs(x(2:4))",ABS(X8(2:4))
|
||||
WRITE (6,*) "isnan(abs(x(2:4)))",ISNAN(ABS(X8(2:4)))
|
||||
LX = ISNAN(X8)
|
||||
WRITE (6,*) "LX = isnan(X)",LX
|
||||
|
||||
XX = HUGE(XX)
|
||||
WRITE(6,*) "Huge(x)=",XX,-XX
|
||||
XX = 1/ZERO
|
||||
WRITE(6,11) XX,-XX
|
||||
11 FORMAT("1/Zero=",Z8,", neg ",Z8)
|
||||
INF8 = XX
|
||||
WRITE (6,12) INF8,-INF8
|
||||
12 FORMAT("1/Zero=",Z16,", neg ",Z16)
|
||||
WRITE (6,*) "Burp!"
|
||||
END
|
||||
Loading…
Add table
Add a link
Reference in a new issue