2016 Update

This commit is contained in:
Tina Müller 2016-12-05 22:15:40 +01:00
parent 948b86eafa
commit dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions

View file

@ -5,10 +5,18 @@
The IEEE floating point specification defines certain 'extreme' floating point values such as minus zero, -0.0, a value distinct from plus zero; not a number, NaN; and plus and minus infinity.
The task is to use expressions involving other 'normal' floating point values in your language to calculate these, (and maybe other), extreme floating point values in your language and assign them to variables.
Print the values of these variables if possible; and show some arithmetic with these values and variables. If your language can directly enter these extreme floating point values then show it.
<br>C.f:
* [http://www.cl.cam.ac.uk/teaching/1011/FPComp/floatingmath.pdf What Every Computer Scientist Should Know About Floating-Point Arithmetic]
* [[Infinity]]
* [[Detect division by zero]]
* [[Literals/Floating point]]
Print the values of these variables if possible; and show some arithmetic with these values and variables.
If your language can directly enter these extreme floating point values then show it.
;See also:
* &nbsp; [http://www.cl.cam.ac.uk/teaching/1011/FPComp/floatingmath.pdf What Every Computer Scientist Should Know About Floating-Point Arithmetic]
;Related tasks:
* &nbsp; [[Infinity]]
* &nbsp; [[Detect division by zero]]
* &nbsp; [[Literals/Floating point]]
<br><br>

View file

@ -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.

View file

@ -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

View file

Internal server error - Forgejo: Beyond coding. We Forge.

500

Internal server error

Forgejo version: 11.0.14+gitea-1.22.0

@ -1,8 +1,8 @@