CP/M-80
(FN) ファイル名は大文字のこと。拡張子はFOR。
cpm.exe f80 (FN), (FN)=(FN)
cpm.exe L80 (FN)/E, (FN)/N
cpm.exe (FN)
C Newton's Method PROGRAM SQROOT WRITE(*, *) 'input positive real' READ(*, *) A X = 0.1 * A DO 10 I = 1, 10 X = 0.5 * ( X + A / X ) WRITE(*, *) I, X, X * X 10 CONTINUE STOP END
CP/M-86
cpm86.exe f77 (fn)
cpm86.exe link86 (fn)
cpm86.exe (fn)
パラメータ文中の負数が0となるバグがある。
C LOG(1 + x) x [-1/2, 1] DOUBLE PRECISION FUNCTION XLOG1(Z) DOUBLE PRECISION Z DOUBLE PRECISION X, T DOUBLE PRECISION A0, A1, A2, A3, A4 DOUBLE PRECISION B0, B1, B2, B3 PARAMETER (A0 = 1.343868263121195503720D-17) PARAMETER (A1 = 2.318975937387695797088D+01) PARAMETER (A2 =-3.596702770967539323901D+01) PARAMETER (A3 = 1.564508745527078514880D+01) PARAMETER (A4 =-1.660498419730477197880D+00) PARAMETER (B0 = 3.478463906081546474972D+01) PARAMETER (B1 =-7.482132500100869683330D+01) PARAMETER (B2 = 5.345272372943044723628D+01) PARAMETER (B3 =-1.409097943508807212884D+01) X = Z / ( Z + 2.0D0 ) T = X * X XLOG1 = (((((A4 * T + A3) * T + A2) * T + A1) * T + A0) $ / (((( T + B3) * T + B2) * T + B1) * T + B0) - Z) * X $ + Z RETURN END C================================================= PROGRAM TEST DOUBLE PRECISION Z, XLOG1 INTEGER I DO 10 I = -5, 10 Z = I / 10.0 WRITE(6, *) Z, XLOG1(Z) - LOG(1.0 + Z) 10 CONTINUE STOP END
C LOG(1 + x) x [-1/2, 1] DOUBLE PRECISION FUNCTION XLOG1P(Z) DOUBLE PRECISION Z DOUBLE PRECISION X, T DOUBLE PRECISION A0, A1, A2, A3, A4 DOUBLE PRECISION B0, B1, B2, B3 A0 = 1.343868263121195503720D-17 A1 = 2.318975937387695797088D+01 A2 = -3.596702770967539323901D+01 A3 = 1.564508745527078514880D+01 A4 = -1.660498419730477197880D+00 B0 = 3.478463906081546474972D+01 B1 = -7.482132500100869683330D+01 B2 = 5.345272372943044723628D+01 B3 = -1.409097943508807212884D+01 X = Z / ( Z + 2.0D0 ) T = X * X XLOG1P = ( ((((A4 * T + A3) * T + A2) * T + A1) * T + A0) $ / (((( T + B3) * T + B2) * T + B1) * T + B0) - Z) * X $ + Z RETURN END C======================================== PROGRAM TEST INTEGER I DOUBLE PRECISION Z, ZZ, XLOG1P DO 10 I = 1, 16 Z = DBLE(I - 6) * 0.1D0 ZZ = XLOG1P(Z) WRITE(6, *) Z, ZZ - LOG(1.0D0 + Z) 10 CONTINUE STOP END
MS-DOS
@ECHO OFF
IF EXIST "%1.FOR" GOTO pass1:pass1
for1 %1 %1 %1 %1
if errorlevel 1 goto exit:pass2
pas2
if errorlevel 1 goto exit:link
link %1 /STACK:10000:exit