Sinus in Cobol berechnen

Die wenigsten Cobol-Compiler verfügen über trigonometrische Funktionen, um z.B. den Sinus berechnen zu können. SINUS.COB, geschrieben für MS-Cobol 2.1, demonstriert auf einfachste Weise die bis auf 10 Stellen hinter dem Komma genaue Sinusberechnung per Fakultät.

IDENTIFICATION DIVISION.

programm-id. SINUS.
author. Udo May-Jung, tj.

ENVIRONMENT DIVISION.

DATA DIVISION.

WORKING-STORAGE SECTION.

77 i  pic 9(5).
77 x  pic s9v9(10)·
77 s  pic s9v9(10) value 0.
17 f  pic 9(18)    value 1.
77 Pi pic s9v9(9)  value 3.141592654.
77 e1 pic 9.9(10)+.
77 e2 pic 9.9(10)+.

PROCEDURE DIVISION.

Main.
	move -3.14 to x.
	perfom Bereich until x > 3.14.
	stop run.

Bereich.
	move zero to i.
	perform Fakultaet until i = 10.
	perform Kurve.
	perform Ergebnis.
	add 0.1 to x.
	move 0 to s.
	move 1 to f.

Fakultaet.
	compute f = f * (i * 2 + 1).
	compute s = s + ((-1) ** i) * (x ** (2 * i + 1)) /f.
	compute f = f * (i * 2 + 2).
	add 1 to i.

Kurve.
	compute col rounded = x / Pi * 39 + 40.
	compute lin rounded = s * 11 + 13.
	display (lin, col) "*".

Ergebnis.
	move x to e1.
	move s to e2.
	display "sin(" e1 ") = " e2.

Berechnet wird der Sinus von x, während sich x in Zehntel-Schritten von -3,14 bis +3,14 bewegt. Je nach Lage des Sterns in den Zeilen 30 oder 31 können Sie sich entweder eine Sinuskurve oder die einzelnen Ergebnisse anzeigen lassen. Die Ungenauigkeiten in der Kurve ergeben sich aus der Anpassung der Sinuswerte an die Bildschirmkoordinaten. Vergleichen Sie die Ergebnisse ruhig einfach mal mit GW-Basic. Die Ausführungsgeschwindigkeit der Cobol-Routine ist nicht gerade berauschend – für die ohnehin seltenen Fälle einer solchen Rechnung in dieser Programmiersprache sollte sie jedoch ausreichen.

Quelle: Udo May-Jung und TJ in PC Magazin PLUS 1/1989