home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 18 REXX
/
18-REXX.zip
/
kzr_0899.zip
/
kzr.INF
(
.txt
)
< prev
next >
Wrap
OS/2 Help File
|
1999-08-24
|
75KB
|
1,453 lines
ΓòÉΓòÉΓòÉ 1. Allgemeines ΓòÉΓòÉΓòÉ
!!! kzr.CMD !!!
FБr die OS/2-Kommandozeile
unter dem klassischen REXX und Object REXX
Version vom August 1998
kzr.CMD ist ein REXX-(k)ommando (z)eilen-(r)echner mit (fast) beliebiger
Genauigkeit fБr die folgenden Rechenoperationen:
Rechenoperation Kommandozeilen-
Operator
Addieren (+)
Subtrahieren (-)
Multiplizieren (*)
Potenzieren mit ganzzahligem Exponenten (**)
Dividieren (:) oder (/)
Dividieren und den ganzzahligen Teil
des Ergebnisses ausgeben (divganz)
Dividieren und den Divisionsrest ausgeben (divrest)
In REXX (oder auch grundsДtzlich in OS/2) kФnnen sowohl das Symbol % als
auch der String // nicht als Kommandozeilen-Parameter Бbernommen werden. Um
die internen mathematischen Operatoren % und // von der Kommandozeile aus
verwenden zu kФnnen, war es erforderlich, die "externen Operatoren" divganz
fБr % und divrest fБr // zu definieren.
ZusДtzlich zu den hier beschriebenen elementaren Rechenoperationen kФnnen auch
Mathematische Funktionen
in die "aktuelle Rechenaufgabe" eingebunden werden.
kzr.CMD ist dann besonders praktisch, wenn man, ohne eines der groсen,
meistens grafischen Mathematik-Programme starten zu mБssen, auf der
OS/2-Kommandozeile ganz schnell eine Rechenaufgabe mit den oben erklДrten
Rechenoperationen und den verfБgbaren mathematischen Funktionen ausfБhren
mФchte. Auсerdem beanspruchen auf einer HPFS-formatierten Festplatte die
"Kernfunktion" kzr.CMD weniger als 24,5 Kilobyte, die kleine Version kzr0.CMD
weniger als 3,2 Kilobyte und die "Hilfsfunktion" MinNDA.CMD weniger als 6,1
Kilobyte. Hinzu kommen, je nach Bedarf etwa 3 bis 6 Kilobyte (eine Ausnahme
mit ca. 10 Kilobyte) fБr jede mathematische Funktion.
Die kleine Version kzr0.CMD hat fast die gleiche RechenfДhigkeit wie die der
groсen Version kzr.CMD ;
nur ist die interne Rechengenauigkeit mit 48 Dezimalstellen konstant
festgelegt.
Des weiteren kФnnen von der OS/2-Kommandozeile, direkt, das heiсt ohne die
Datei kzr.CMD zu verwenden,
6 REXX-Umwandlungsfunktionen aufgerufen werden, die es gestatten, Zahlen --
Integer-Anteil und/oder Mantisse -- von dezimal nach hexadezimal, von dezimal
nach binДr, von binДr nach hexadezimal und jeweils umgekehrt umzuwandeln.
kzr.CMD, kzr0.CMD, MinNDA.CMD, die REXX-Dateien fБr die mathematischen
Funktionen sowie die sechs Umwandlungsfunktionen sind "Cardware". Ъber eine
Nachricht (auch Fax oder e-mail), daс der REXX-(k)ommando(z)eilen-(r)echner
kzr.CMD verwendet wird, wБrde ich mich freuen.
Diese Version vom August 1998 soll vorlДufig die endgБltige Version von
kzr.CMD, den 34 mathematischen Unterprogrammen, den 6 Umwandlungsfunktionen
und Prim.CMD bleiben. Weitere Versionen sind nicht geplant, es sei denn, es
wБrden mir Fehler mitgeteilt werden oder ich wБrde selber Fehler bemerken.
Wenn allerdings der Wunsch bestehen sollte, weitere " externe" Funktionen,
auch weitere der sogenannten "hФheren Funktionen" verwenden zu kФnnen, so
erbitte ich eine diesbezБgliche Nachricht. Nachrichten Бber (von mir noch
nicht entdeckte) Fehler sind sehr willkommen.
Das Gesamtpaket kzr.CMD wird ab Mitte August 1998 auch fБr Object REXX 1.0 fБr
Linux verfБgbar sein.
Object Rexx 1.0 fБr Linux ist aus dem Internet Бber die Adresse
http://service2.boulder.ibm.com/dl/rexx/orexxlinux-d
▒kostenlos▒ erhДltlich.
Diese INF-Datei wurde erstellt mit Hilfe von Phelsuma/2, einer
Entwicklungsumgebung fБr OS/2-Hilfe-Dateien. Der Autor von Phelsuma/2 ist
Michael Petz, BФrсumer Str. 15 in D-38312 Heiningen; Tel.: 05334 7186
Im August 1998,
Hermann Mahr
Kafkastraсe 14
64291 Darmstadt
Telefon: 06151 373802
Telefax: 06151 373805 (von 09.00 Uhr bis 23.00 Uhr)
e-mail: h_mahr@hrzpub.tu-darmstadt.de
ΓòÉΓòÉΓòÉ 2. Installation ΓòÉΓòÉΓòÉ
Die Installation des
(k)ommando(z)eilen(r)echners kzr.CMD
geschieht dadurch, daс man die Dateien
kzr.CMD, kzr0.CMD,
MinNDA.CMD, und kzr.INF,
alle mathematischen Funktionen
sin.CMD, cos.CMD, tan.CMD,
cot.CMD, u.s.w.,
alle Umwandlungsfunktionen
d2b, d2x, u.s.w.
und die Funktion
prim.CMD
in ein gemeinsames Verzeichnis kopiert, das Бber den Pfad erreichbar ist.
Da OS/2 Warp 3.0 und Warp 4.0 den ANSI-Treiber standardmДсig geladen hat, kann
die Bildschirm-Anzeige der Ergebnisse von von kzr.CMD farbig erfolgen.
Alle von kzr.CMD aufrufbaren Funktionen und auch kzr.CMD selbst sind fБr
eine farbige Ausgabe eingerichtet.
Die Anwendung des (k)ommando(z)eilen(r)echners kzr.CMD erfolgt natБrlich
von der OS/2-Kommandozeile aus.
ΓòÉΓòÉΓòÉ 3. Anwendung ΓòÉΓòÉΓòÉ
Die Anwendung von kzr.CMD ist auсerordentlich einfach, was in den folgenden
Unterabschnitten
Rein numerische Anwendung
und
Anwendung mir Variablen
an Beispielen erlДutert wird.
Wichtige Anmerkung:
Die Symbole , $, ?, \, @, #, ' und " dБrfen auf der
OS/2-Kommandozeile in der Eingabe-Kette fБr kzr.CMD und kzr0.CMD nicht
verwendet werden, weil sie keine der in der arithmetischen Syntax erlaubten
Operatoren sind. Geschieht dies doch, so wird eine diesbezБgliche Meldung
angezeigt.
Die Symbole %, &, <, > und | sowie die Strings <<, >> und // kФnnen
auf der OS/2-Kommandozeile nur in bestimmten FДllen verwendet werden; nur
zeigt kzr.CMD bei Verletzung der einschlДgigen Regeln leider keine
diesbezБgliche Meldungen an.
ΓòÉΓòÉΓòÉ 3.1. Rein numerische Anwendung ΓòÉΓòÉΓòÉ
Man gebe als Beispiel folgendes auf der OS/2-Kommandozeile ein:
kzr 36, 2.5+(2.8E-2+2.4E-1*exp(-1.313))**2
oder -- der besseren Ъbersichtlichkeit wegen -- mit Leerzeichen:
kzr 36, 2.5 + ( 2.8E-2 + 2.4E-1 * exp(-1.313) ) ** 2
Diese Zeichenkette, bestehend aus Strings und einzelnen Symbolen, wird im
folgenden Text als Eingabe-Kette (EK), Teile davon als Eingabe-String, also
als EK-String bezeichnet.
Nach dem EK-String kzr, gefolgt von mindestens 1 Leerzeichen, stellt die
positive ganze Zahl 36 die Anzahl der Dezimalstellen ein, mit denen intern
maximal gerechnet werden soll.
In der Eingabe-Kette
kzr 36, 2.5+(2.8E-2+2.4E-1*exp(-1.313))**2
oder auch
kzr 36, 2.5 + ( 2.8E-2 + 2.4E-1 * exp(-1.313) ) ** 2
ist nach der ganzen Zahl 36 ein Komma zwingend erforderlich. Vor diesem Komma
kФnnen ein oder mehrere Leerzeichen stehen und nach diesem Komma muс
mindestens 1 Leerzeichen folgen.
Wird nach dem EK-String kzr keine ganze Zahl, die grФсer als 1 sein muс,
eingetragen, so ist an dieser Stelle dennoch ein Komma mit mindesten 1
Leerzeichen davor und dahinter unbedingt erforderlich. (In diesem Fall wird
intern mit maximal 20 Dezimalstellen gerechnet.)
Der im Anschluс an den EK-String
kzr 36, oder kzr ,
einzugegebende EK-String
2.5+(2.8E-2+2.4E-1*exp(-1.313))**2
oder auch
2.5 + ( 2.8E-2 + 2.4E-1 * exp(-1.313) ) ** 2
muс die gleiche Form haben, demzufolge auch nach den gleichen Syntax-Regeln
aufgebaut sein, wie eine entsprechende Anweisung in einer REXX-Stapel-Datei
aufgebaut sein mБсte. VerstФсe gegen diese Syntax-Regeln bewirken Meldungen,
die in den meisten FДllen den Syntaxfehler auch erlДutern.
In den DezimalbrБchen 2.5, 2.8E-2, 2.4E-1 und -1.313 muс jeweils der im
angloamerikanischen Sprachraum Бbliche Dezimalpunkt verwendet werden. Ein
Komma dient in Funktions-Argumenten mit mehreren Variablen der Trennung dieser
Variablen, die ja ihrerseits wiederum DezimalbrБche sein kФnnen. Bei den
DezimalbrБchen ist es gleichgБltig, ob der Buchstabe "E" oder "e"
verwendet wird.
Die Eingabe der "aktuelle Rechenaufgabe" auf der OS/2-Kommandozeile hat
gegenБber einer Eingabe "innerhalb von kzr.CMD" den Vorteil, daс die
Eingabe-Kette mit einem Tastendruck wieder auf die OS/2-Kommandozeile gebracht
werden kann und so sehr leicht Eingabefehler beseitigt werden kФnnen oder daс
eine neue "aktuelle Rechenaufgabe" durch Оnderung einzelner Teile dieser
Eingabe-Kette formuliert werden kann.
Sonderfall:
Wenn man bei der unmittelbar vorangegangenen Berechnung schon ein
Ergebnis berechnet hat, kann man, nachdem man die vorherige
OS/2-Kommandozeilen-Eingabe per Tastendruck zurБckgeholt oder eine neue
"aktuelle Rechenaufgabe" eingegeben hat, durch Ersetzen einer bestimmten
Zahl durch die Variable z das Ergebnis der unmittelbar vorangegangenen
Berechnung in der neuen "aktuellen Rechenaufgabe" weiterverwenden. Aber
nur dann !
Hierzu ein Beispiel:
Das Ergebnis der unmittelbar vorangegangenen Berechnung der
"Rechenaufgabe" 45-40 durch die Eingabe-Kette
kzr , 45-40
ist
5.
Ruft man jetzt die Eingabe-Kette kzr , 45-40 der unmittelbar
vorangegangenen Rechenaufgabe auf die Бbliche Weise auf die
OS/2-Kommandozeile zurБck, so kann man einen oder auch mehrere
Zahlenwerte der Eingabe-Kette durch die Variable z ersetzen. Somit
wДre zum Beispiel die neue Eingabe-Kette
kzr , z-40 ,
deren Ergebnis wegen z = 5 gleich -35 ist.
Dieses Verfahren kann, auch in komplizierteren algebraischen
AusdrБcken, mehrmals nacheinander nacheinander angewendet werden.
Bei der kleinen Version kzr0.CMD
ist die interne Rechengenauigkeit mit 48 Dezimalstellen fest eingestellt.
Daher ist das erste Komma in der Eingabekette -- unmittelbar nach der
Teilkette kzr0.CMD -- nicht erlaubt.
Die "aktuelle Rechenaufgabe" muс daher unmittelbar nach dem der Teilkette
kzr0.CMD folgenden Leerzeichen (mindestens eines) geschehen.
Die Eingabe
kzr0 sin(.2)
wДre ein Beispiel.
Bei Eingabefehlern oder internen StФrungen, zum Beispiel das Erzeugen zu
groсer Zahlen, geben REXX oder kzr0.CMD lediglich eine allgemeine
Fehlermeldung aus.
ΓòÉΓòÉΓòÉ 3.2. Anwendung mit Variablen ΓòÉΓòÉΓòÉ
kzr.CMD bietet die MФglichkeit, eine auf der OS/2-Kommandozeile eingegebene
"Rechenaufgabe" zu lФsen, in der in algebraischen AusdrБcken und
Funktions-Argumenten nicht nur feste Zahlenwerte sondern auch eine Mischung aus
festen Zahlenwerten und maximal zwei verschiedenen Variablen x und y, denen
natБrlich jeweils ein Wert zugewiesen werden muс, vorkommen. Es kФnnen aber
auch nur eine oder zwei verschiedene Variable verwendet werden.
(Leider dБrfen nicht alle Buchstaben als Variablen-Namen verwendet werden;
x und y, u und v sowie p und q sind erlaubte Variablen-Namen.)
Hierzu zwei Beispiele:
1. Die Eingabe auf der OS/2-Kommandozeile
kzr , 1 + x/y ; x = 1, y = 2
formuliert die Rechenaufgabe
1 + x/y .
Das Semikolon trennt diese Rechenaufgabe von den Zuweisungen
x = 1 und y = 2,
ab, die ihrerseits durch ein Komma voneinander getrennt werden mБssen.
Hat man nun durch BetДtigung der Eingabetaste das Ergebnis 1.5 erhalten,
so kann man, nachdem man die vorherige Eingabe
kzr , 1 + x/y ; x = 1, y = 2
auf die OS/2-Kommandozeile zurБckgeholt hat, eine oder auch beide
Variablen Дndern.
Hierbei erleichtert es die Arbeit, daс sowohl die Variablen als auch der
Cursor am Ende der "zurБckgeholten Kommandozeilen-Eingabe" stehen und
daher das Positionieren des Cursors zur Оnderung der Wertes einer
Variablen schnell geschehen ist.
Wird jetzt die Variable y = 4 gesetzt, so erhДlt man das neue Ergebnis
1.25.
Nachdem man die so geДnderte Eingabe
kzr , 1 + x/y ; x = 1, y = 4
auf die OS/2-Kommandozeile zurБckgeholt hat, kann man auch in diesem
Beispiel das am Ende des Unter-Abschnittes "Rein numerische Anwendung"
als Sonderfall beschriebene Verfahren mit der Variablen z anwenden, um
das Ergebnis z = 1.25 in diese neue Rechenaufgabe einzubringen.
Man Дndert in der "zurБckgeholten Kommandozeilen-Eingabe"
kzr , 1 + x/y ; x = 1, y = 4
die Variable y in die Variable z und erhДlt mit der Eingabe
kzr , 1 + x/z ; x = 1, y = 4
das Ergebnis 1.8, da x = 1 und z = 1.25 ist.
Die Zuweisung y = 4 kann hier stehen bleiben; sie hat keine Wirkung
mehr, weil die Variable y in der Rechenaufgabe
kzr , 1 + x/z ; x = 1, y = 4
nicht mehr vorgekommt; man hДtte sie ebenso gut auch entfernen kФnnen,
ebenso auch das Komma im Anschluс an die Zuweisung x = 1.
2. Die etwas kompliziertere Eingabe auf der OS/2-Kommandozeile
kzr 48, sin(1 + x/y) + sqrt(x+y) * pot(y,x) ; x = 1.3, y =
.29E-1
formuliert die Rechenaufgabe
sin(1 + x/y) + sqrt(x+y) * pot(y,x),
die mit 48 Dezimalstellen gerechnet werden soll.
Das Semikolon ; trennt diese Rechenaufgabe von den Zuweisungen
x = 1.3 und y = .29E-1.
Bei der kleinen Version kzr0.CMD
ist die zuvor beschriebene Anwendung mit Variablen nicht mФglich.
ΓòÉΓòÉΓòÉ 4. Mathematische Funktionen ΓòÉΓòÉΓòÉ
Die "Kernfunktion" kzr.CMD kann die folgenden "externen" mathematische
Funktionen verwenden, deren Argumente reelle Zahlen sein mБssen.
Trigonometrische Funktionen und Hyperbelfunktionen
Sinusfunktion sin(x)
Cosinusfunktion cos(x)
Tangensfunktion tan(x)
Cotangensfunktion cot(x)
Hyperbel-Sinusfunktion sinh(x)
Hyperbel-Cosinusfunktion cosh(x)
Hyperbel-Tangensfunktion tanh(x)
Hyperbel-Cotangensfunktion coth(x)
Bei den folgenden vieldeutigen inversen trigonometrischen und hyperbolischen
Funktionen, den Umkehrfunktionen der trigonometrische Funktionen und der
Hyperbelfunktionen, wird stets der sogenannte Hauptwert berechnet.
Arcus-Sinusfunktion arcsin(x)
Arcus-Cosinusfunktion arccos(x)
Arcus-Tangensfunktion arctan(x)
Arcus-Cotangensfunktion arccot(x)
Area-Sinusfunktion arsinh(x)
Area-Cosinusfunktion arcosh(x)
Area-Tangensfunktion artanh(x)
Area-Cotangensfunktion arcoth(x)
Weitere wichtige elementare und hoehere mathematische Funktionen
Exponentialfunktion exp(x)
Potenzfunktion pot(x,y)
Funktion 2. Wurzel sqrt(x)
Funktion 3. Wurzel root3(x)
Logarithmus zur Basis e ln(x)
Logarithmus zur Basis 10 log(x)
Logarithmus zur Basis 2 ld(x)
FakultДtsfunktion n!(u)
FakultДtsfunktion n!!(u)
Gammafunktion ga(x)
Binomialkoeffizient bin(u,v)
Gauсsche Fehlerfunktion э(x) phi(x)
Fehlerfunktion p_(x) = (1 + э(x))/2 p_(x)
Fehlerfunktion q_(x) = (1 - э(x))/2 q_(x)
Errorfunktion erf(x)
KomplementДre Errorfunktion erfc(x)
Modulofunktion mod(u,v)
Kleinster gemeinsamer Teiler gcd(u,v)
Ist das Ergebnis einer Funktion mit einem reellen Argument eine komplexe oder
rein imaginДre Zahl, wie zum Beispiel bei der Funktion sqrt(x) fБr Werte x <
0, so wird eine diesbezБgliche Meldung ausgegeben.
Ъber die mit diesen mathematischen Funktionen erzielbare maximale numerische
Genauigkeit siehe den Abschnitt ==> Numerische Genauigkeit
Literatur
[1] I. S. GRADSHTEYN and I. M. RYZHIK
Γûê Table of Integrals, Series and Products Γûê
ACADEMIC PRESS New York and London 1965
[2] Milton Abramowitz & Irene A. Stegun
Γûê Handbook of Mathematical Functions Γûê
DOVER PUBLICATIONS, INC., NEW YORK 1965
[3] Milton Abramowitz & Irene A. Stegun
Γûê Handbook oh Mathematical Functions Γûê
DOVER PUBLICATIONS, INC., NEW YORK 1970
[4] JEROME SPANIER and KEITH B. OLDHAM
Γûê AN ATLAS OF FUNCTIONS Γûê
HEMISPHERE PUBLISHING CORPORATION, Washington New York London 1987;
ebenfalls: Springer-Verlag Berlin
[5] I. N. BRONSTEIN und K. A. SEMENDJAJEW
Γûê TASCHENBUCH DER MATHEMATIK Γûê
Verlag Harri Deutsch, Thun und Frankfurt, 19. Auflage 1980
[6] P. H. MБller
Γûê Lexikon der Stochastik Γûê
Akademie-Verlag GmbH, Berlin 1991, 5. Auflage
[7] Robert Sedgewick
Γûê Algorithmen in C Γûê
Addison-Wesley (Deutschland) GmbH, 1. Auflage 1992
ΓòÉΓòÉΓòÉ 5. Mathematische Konstanten ΓòÉΓòÉΓòÉ
Die "Kernfunktion" kzr.CMD kann die folgenden elementaren mathematischen
Konstanten verwenden:
у [1] pi()
e e()
Literatur oder sonstige Quellen
[1] John Brock
Γûê RXXMATH v1.3 -- Arbitrary Precision Math Functions for REXX 1996 Γûê
Bei verschiedenen Internet-Adressen
ΓòÉΓòÉΓòÉ 6. Numerische Genauigkeit ΓòÉΓòÉΓòÉ
Ohne Verwendung der "externen" mathematischen Funktionen ist die
Rechengenauigkeit der "Kernfunktion" kzr.CMD fast beliebig hoch.
Dabei ist aber zu beachten, daс die Rechenzeit mit steigender Anzahl ND der
fБr den Rechenvorgang verwendeten Dezimalstellen Бberproportional zunimmt.
Man sollte daher sorgfДltig abschДtzen, wieviele Dezimalstellen fБr eine
bestimmte Aufgabe erforderlich sind.
Im Gegensatz dazu kФnnen einige der fБr kzr.CMD verfБgbaren mathematischen
Funktionen (==> Mathematische Funktionen) nur mit einer begrenzten numerischen
Genauigkeit berechnet werden.
Wichtig:
Bei Verwendung der "externen" mathematischen Funktionen wird bei
Ъberschreitung der Rechengenauigkeit durch ein akustisches Signal und
eine zusДtzliche Anzeige darauf aufmerksam gemacht. Auсerdem wird die von
der Eingabe-Kette (Definition folgt.) verlangte Gesamt-Rechengenauigkeit,
wenn sie hФher als die der aufgerufenen mathematischen Funktionen ist,
(mit Hilfe der von kzr.CMD intern aufgerufenen MinNDA.CMD) reduziert und
von derjenigen der aufgerufenen mathematischen Funktionen bestimmt,
welche die geringste maximale Rechengenauigkeit liefern kann.
Ein Beispiel:
Die Eingabe-Kette sei
kzr 56, 1/3 + phi(0.3)
Der Bruch 1/3 kФnnte mit der geforderten Gesamt-Rechengenauigkeit von
56 Dezimalstellen berechnet und ausgegeben werden.
Die Funktion phi(x) aber kann mit nur maximal 50 Dezimalstellen berechnet
werden.
Die Gesamt-Rechengenauigkeit der in dieser Eingabe-Kette aufgerufenen
mathematischen Funktionen entspricht also maximal 50 Dezimalstellen.
Daher wird auch das Ergebnis mit maximal 50 Dezimalstellen ausgegeben.
Es wird somit keine hФhere Gesamt-Rechengenauigkeit vorgetДuscht als
tatsДchlich vorhanden war.
Bitte folgendes beachten:
Die Schwierigkeit, bei einer Differenz zweier nahezu gleich groсer Zahlen
ein genБgend genaues Ergebnis zu erreichen, ist kein spezielles Problem
von kzr.CMD, sondern ein allgemeines Problem der numerischen Mathematik.
Ein Beispiel fБr die Schwierigkeit, bei einer Differenz zweier nahezu
gleich groсer Zahlen ein genБgend genaues Ergebnis zu erreichen, findet
man im Abschnitt "Bekannte FehlermФglichkeiten"
═══ 7. Bekannte FehlermФglichkeiten ═══
1. Wenn man aus irgendwelchen GrБnden eine laufende Rechenprozedur abbricht,
zum Beispiel mit der Tastenkombination Strg+c, wird die Datei
NDZahl.DAT nicht gelФscht, was bei einem normalen Ablauf von kzr.CMD
immer geschieht.
Die Datei NDZahl.DAT muс dann von Hand gelФscht werden, denn es kФnnte
sein, daс man (versehentlich ?) eine zu groсe Zahl ND fБr die Anzahl der
zu verwendenden Dezimalstellen eingegeben hatte, was die Geduld des
Anwenders so Бberforderte, daс er den Rechenvorgang abgebrochen hatte. Ist
die Datei NDZahl.DAT nicht gelФscht, so hat sie diese zu groсe Zahl ND
gespeichert und Бbergibt sie bei dem erneuten Rechenvorgang der dabei
aufgerufenen Funktion, was den erneuten Rechenvorgang wieder mit einer zu
hohen Zahl ND fБr die zu verwendenden Dezimalstellen belastet.
Zur Fehlerdiagnose hilft eine einfache Eingabe,
zum Beispiel:
kzr , 1+1
Diese einfache Rechenprozedur wird dann, ohne daс man eine bestimmte Zahl
ND fБr die Anzahl der zu verwendenden Dezimalstellen eingegeben hat, mit
der vorher (versehentlich ?) eingegebenen Zahl ND durchgefБhrt, was aber
ohne Zwischenfall geschieht. Da kzr.CMD in der Zeile oberhalb des
numerischen Ergebnisses 2 die verwendete Zahl ND anzeigt, kann man
erkennen, ob dort bei dieser Berechnung 1+1 eine unvernБnftig groсe Zahl
ND verwendet worden ist. (Diese Zahl ND ist dann in der Datei NDZahl.DAT
gespeichert.) Ist dies der Fall, so muс man die Datei NDZahl.DAT
lФschen, womit der Fehler beseitigt ist.
2. Γûê Bei Rechenaufgaben, in denen eine Differenz Γûê
█ zweier nahezu gleich groсer Zahlen auftritt, ██
Γûê ist besondere Vorsicht geboten ! ΓûêΓûêΓûêΓûêΓûêΓûêΓûêΓûêΓûêΓûêΓûê
Beispiel:
Die bekannte Funktional-Beziehung
cosh¤(x) - sinh¤(x) = 1
kann, wenn man sie zum Beispiel als die aktuelle Rechenaufgabe mit der
Eingabe-Kette
kzr 48, cosh(x)**2 - sinh(x)**2; x=3
auf der OS/2-Kommandozeile startet, je nach GrФсe der Variablen x
ungenaue, also von der ganzen Zahl 1 mehr oder weniger abweichende
Ergebnisse liefern.
Dies liegt daran, daс die Funktionswerte
cosh(x) = (exp(+x) + exp(-x))/2
und
sinh(x) = (exp(+x) - exp(-x))/2
sich umso weniger von einander unterscheiden, je grФсer die Variable x
ist.
Man kann durch ErhФhen der Zahl ND, welche als die erste ganze Zahl
unmittelbar nach dem String kzr folgt und die Zahl der fБr die
Berechnung zu verwendenden Dezimalstellen festlegt, vergrФсern und so die
numerische Genauigkeit erhФhen.
Da aber die Zahl ND der zu verwendenden Dezimalstellen sich nicht
beliebig vergrФсern lДсt und Бberdies die Rechenzeit Бberprortional zur
VergrФсerung von ND ansteigen wБrde, ist die hier als Beispiel gewДhlte
Funktional-Beziehung nicht geeignet, zum Beispiel die Richtigkeit der
numerischen Ergebnisse der Funktionen cosh(x) und sinh(x) zu
БberprБfen.
(Ein zufДllig richtiges Ergebnis, nДmlich die ganze Zahl 1 bei einer
solchen PrБfung, wДre notwendig aber nicht hinreichend.)
ΓòÉΓòÉΓòÉ 8. d2x, x2d, b2d, d2b, b2x, x2b ΓòÉΓòÉΓòÉ
Umwandlungen von Zahlen
zwischen den Darstellungsformen
Dezimal, Hexadezimal und BinДr
Die Funktionen D2X.CMD, X2D.CMD, D2B.CMD, B2D.CMD, B2X.CMD u d X2B.CMD estatten
im direkten Aufruf von der OS/2-Kommandozeile die Umwandlung
von Dezimalzahlen in Hexadezimalzahlen (D2X.CMD),
von Hexadezimalzahlen in Dezimalzahlen (X2D.CMD),
von Dezimalzahlen in BinДrzahlen (D2B.CMD),
von BinДrzahlen in Dezimalzahlen (B2D.CMD),
von BinДrzahlen in Hexadezimalzahlen (B2X.CMD) und
von Hexadezimalzahlen in BinДrzahlen (X2B.CMD).
Alle sechs Funktionen sind sowohl auf DezimalbrБche als auch auf deren
SpezialfДlle "ganzzahliger Anteil" und Mantisse separat anwendbar.
1. Die Funktionen
D2X.CMD, X2D.CMD, D2B.CMD und B2D.CMD.
FБr die Umwandlung ganzer Zahlen sind die Funktionen D2X.CMD, X2D.CMD, D2B.CMD
und B2D.CMD exakt, da sie aufgrund einer diesbezБglichen, von der auf der
OS/2-Kommandozeile eingegebenen und umzuwandelnden Zahl abgeleiteten Anweisung
in den externen Prozeduren genБgend Stellen fБr arithmetische Operationen zur
VerfБgung haben.
Hierzu ein Beispiel:
Die Eingabe der Dezimalzahl
16696875
mit der Eingabe-Kette
D2X 16696875
erzeugt den String
FEC62B
als die entsprechende Hexadezimalzahl.
Die RБck-Umwandlung ist ebenso einfach:
Die Eingabe der Hexadezimalzahl
FEC62B
mit der Eingabe-Kette
X2D FEC62B
erzeugt den String
16696875
als die entsprechende Dezimalzahl.
Dagegen sind Umwandlungen von DezimalbrБchen nur in AusnahmefДllen exakt.
Der ganzzahlige Anteil eines Dezimalbruchs wird jeweils exakt umgewandelt;
fБr die Mantisse ist im allgemeinen Fall nur eine NДherung erzielbar, die aber
umso genauer ist, je mehr Stellen fБr die dazu erforderlichen arithmetischen
Operationen verfБgbar sind.
Die Stellengenauigkeit fБr die arithmetischen Operationen fБr die Umwandlung
von Mantissen kann Бber die OS/2-Kommandozeile eingestellt werden.
Beispiel 1:
Die Eingabe der Dezimalzahl
166.96875
mit der Eingabe-Kette
D2X 56, 166.96875
erzeugt den String
A6.F8
als die entsprechende Hexadezimalzahl.
Bei den Funktionen D2X.CMD und X2D.CMD bedeutet die positive ganze
Zahl 56 zwischen den Teilstrings D2X oder X2D der Eingabe-Kette
einerseits und dem fБr die Umwandlung von DezimalbrБchen in jedem Fall
verbindlichen Komma andererseits, daс fБr die Umwandlung der Mantisse
intern bis zu 56 Stellen fБr die zur Umwandlung benФtigten arithmetischen
Operationen aufgewender werden kФnnen.
In diesem Fall ist zu erkennen, daс fБr die Umwandlung der dezimalen
Mantisse .96875 in die hexadezimale Mantisse .F8 nur sehr wenige
Stellen erforderlich waren; die Umrechnung gelang offenbar exakt. Dies
kann natБrlich nachgeprБft werden.
Die Eingabe der Hexadezimalzahl
A6.F8
mit der Eingabe-Kette
X2D 56, A6.F8
erzeugt den String
166.96875
als die entsprechende Dezimalzahl.
Da auch hier keine 56 Dezimalstellen ausgegeben wurden, ist es in hohem
Maсe wahrscheinlich, daс die Umrechnung in beiden FДllen exakt geschehen
konnte.
Ganz anders ist das Ergebnis einer solchen Umrechnung in den sehr hДufig
auftretenden FДllen, in denen nur eine NДherung erreicht werden kann. Hierzu
das folgende;
Beispiel 2:
Die Eingabe der Dezimalzahl
15.23
mit der Eingabe-Kette
D2X 32, 15.23
erzeugt den String
F.3AE147AE147AE147AE147AE147AE147
als die entsprechende Hexadezimalzahl.
Zerlegt man in Gedanken den String fБr diese Hexadezimalzahl in de
folgenden Weise
F.3 AE147 AE147 AE147 AE147 AE147
AE147,
so erkennt man an der 6-fachen periodischen Aneinanderreihung des
Teilstrings AE147, daс die Hexadezimale Darstellung der Dezimalzahl
15.23 nur eine NДherung sein kann.
Die Eingabe der Hexadezimalzahl
F.3AE147AE147AE147AE147AE147AE147
mit der Eingabe-Kette
X2D 32,
F.3AE147AE147AE147AE147AE147AE147
erzeugt den String
15.23
als die entsprechende Dezimalzahl.
Noch augenscheinlicher ist das folgende
Beispiel 3:
Die Eingabe der Dezimalzahl
12.4
mit der Eingabe-Kette
D2X 32, 12.4
erzeugt den String
C.6666666666666666666666666666666
als die entsprechende Hexadezimalzahl.
Man erkennt man an der periodischen Aneinanderreihung der Ziffer 6, daс
die Hexadezimale Darstellung der Dezimalzahl 12.4 nur eine NДherung sein
kann.
Die Eingabe der Hexadezimalzahl
C.6666666666666666666666666666666
mit der Eingabe-Kette
X2D 32,
C.6666666666666666666666666666666
erzeugt den String
12.4
als die entsprechende Dezimalzahl.
Es ist das Ergebnis einer Formatierungsanweisung innerhalb von X2D.CMD, daс
als RБck- Umwandlungs-Ergebnis die Dezimalzahl 12.4 wieder exakt
herausgekommen ist.
Voraussetzung dafБr ist allerdings, daс bei der RБck-Umwandlung Hexadezimal
--> Dezimal mit X2D.CMD nicht mehr Stellen fБr die arithmetischen
Operationen in der Kommandozeilen-Eingabe-Kette vorgegeben werden, als es bei
der Umwandlung Dezimal --> Hexadezimal mit X2D.CMD der Fall war, nДmlich 32
Stellen.
WБrde man fБr die RБck-Umwandlung Hexadezimal --> Dezimal weniger als 32
Stellen in der Eingabe-Kette vorgeben, so bleibt das Ergebnis 12.4.
WБrde man allerdings fБr die RБck-Umwandlung Hexadezimal --> Dezimal mehr als
32 -- beispielsweise 38 -- Stellen in der Eingabe-Kette vorgeben, so bleibt
das Ergebnis
12.39999999999999999999999999999999999998
eine NДherung.
Bei der Umwandlung Hexadezimal --> Dezimal mit X2D.CMD und der
anschlieсenden RБck-Umwandlung Dezimal --> Hexadezimal mit D2X.CMD muс ein
wenig anders verfahren werden. Hierzu das folgende
Beispiel 4:
Die Eingabe der Hexadezimalzahl
F1.DD6345F
mit der Eingabe-Kette
X2D 24, F1.DD6345F
erzeugt den String
241.864796038717031478881836
als die entsprechende Dezimalzahl.
Die Eingabe der Dezimalzahl
241.864796038717031478881836
mit der Eingabe-Kette
D2X 24,
241.864796038717031478881836
erzeugt den String
F1.DD6345F0000000000000135
als die entsprechende Hexadezimalzahl, die, wie man sieht, natБrlich nur
eine NДherung ist.
WБrde man wie im vorhergehende Fall vorgehen, daс man nДmlich bei der
RБck-Umwandlung Dezimal --> Hexadezimal mit D2X.CMD die Zahl der
Stellen fБr die arithmetischen Operationen erhФht, also zum Beispiel von
24 auf 30, so ist das Ergebnis
F1.DD6345F00000000000001357C29
auch nicht genauer.
Es liegt also die Vermutung nahe, daс schon das Ergebnis
241.864796038717031478881836
der Umwandlung Hexadezimal --> Dezimal eine NДherung gewesen ist.
Es ist jetzt zweckmДсig, die Zahl der Stellen fБr die arithmetischen
Operationen bei der Umwandlung Hexadezimal --> Dezimal nach und nach zu
erhФhen, und zwar so weit, bis die Mantisse der Ergebnis-Dezimalzahl nicht
mehr an Stellen zunimmt. Dies ist bei diesem Beispiel einer
Umwandlungsaufgabe ab der Zahl 29 der Fall.
Die Eingabe der Hexadezimalzahl
F1.DD6345F
mit der Eingabe-Kette
X2D 29, F1.DD6345F
erzeugt den String
241.8647960387170314788818359375
als die entsprechende Dezimalzahl.
Die Eingabe der Dezimalzahl
241.8647960387170314788818359375
mit der Eingabe-Kette
D2X 29,
241.8647960387170314788818359375
erzeugt den String
F1.DD6345F
als die entsprechende Hexadezimalzahl.
Wer nur eine Mantisse umwandeln will, darf den (Dezimal)punkt nicht
vergessen.
Auch dazu ein Beispiel:
Die Eingabe der Dezimalzahl
.0765625
mit der Eingabe-Kette
D2X 24, .9765625
erzeugt den String
.FA
als die entsprechende Mantisse in hexadezimaler Darstellung.
Die Eingabe der Hexadezimalzahl
.1A3
mit der Eingabe-Kette
D2X 24, .1A3
erzeugt den String
.102294921873
als die entsprechende Mantisse in dezimaler Darstellung.
2. Die Funktionen
B2X.CMD und X2B.CMD.
Im Gegensatz zu den Funktionen D2X.CMD, X2D.CMD, D2B.CMD und B2D.CMD, die fБr
die Mantisse im allgemeinen Fall eine NДherungsdarstellung und nur in
SpezialfДllen eine exakte Darstellung liefern, sind die Umwandlungen von
von BinДrzahlen in Hexadezimalzahlen (B2X.CMD)
und
von Hexadezimalzahlen in BinДrzahlen (X2B.CMD)
stets exakt, und eine MФglichkeit oder gar eine Notwendigkeit, die Anzahl der
fБr die arithmetischen Operationen intern zu verwendenden Stellen vorzugeben,
gibt es bei den Funktionen B2X.CMD und X2B.CMD nicht.
Hier zwei Beispiele dazu:
Die Eingabe der Hexadezimalzahl
CA.B5
mit der Eingabe-Kette
X2B CA.B5
erzeugt den String
11001010.10110101
als die entsprechende binДre Darstellung.
Die Eingabe der BinДrzahl
10100101.10011011
mit der Eingabe-Kette
B2X 10100101.10011011
erzeugt den String
A5.9B
als die entsprechende hexadezimale Darstellung.
ΓòÉΓòÉΓòÉ 9. Primfaktoren ΓòÉΓòÉΓòÉ
Zerlegung einer positiven ganzen Zahl
in ihre Primfaktoren
Die Funktion prim.CMD kann, ohne die "Kernfunktion" kzr.CMD verwenden zu
mБssen, direkt von der Kommandozeile mit der Eingabe
prim x
aufgerufen werden, wobei x eine positive ganze Zahl sein muс.
Obgleich eine interpretierende Programmiersprache wie REXX fБr die Zerlegung
einer Zahl in ihre Primfaktoren nicht die ideale Programmiersprache ist, kann
prim.CMD diese Aufgabe in vielen FДllen bewДltigen. Auch ist der
Primitiv-Algorithmus, der in dem Versuch besteht, die zu zerlegende ganze Zahl
x nacheinander durch die Zahlen 2,3,4,5 ...... bis sqrt(x) zu dividieren,
sicher nicht der wirksamste Algorithmus zur Zerlegung einer ganzen positiven
Zahl in mФgliche Primfaktoren.
Eine der Schwierigkeiten, die bei dem hier verwendeten Algorithmus auftreten,
besteht darin, daс bei Primfaktoren, die wesentlich grФсer als 1.2E+12 sind,
die Rechenzeiten unkontrollierbar lang werden. prim.CMD kann auf einem Rechner
mit einem Pentium Pro, 200 MHz Taktgeschwindigkeit und ausreichend
Hauptspeicher
die Zahl
1 200 000 000 053
als eine Primzahl innerhalb von 59 Sekunden erkennen.
Hinweis fБr die Rechenpraxis:
Wenn nach etwa 3 Minuten ein Rechenvorgang noch nicht beendet ist, kann die
geforderte Zerlegung von prim.CMD mit hoher Wahrscheinlichkeit nicht geleistet
werden. In einem solchen Falle sollte der Rechenvorgang mit der
Tastenkombination Strg+c abgebrochen werden.
prim.CMD erlaubt die Eingabe von Zahlen mit GliederungsabstДnden, zum Beispiel
zwischen jeweils 3 Ziffern, um die Ъbersichtlichkeit zu erhФhen und so die
Wahrscheinlichkeit von Eingabefehlern zu reduzieren. (Beispielsweise wird die
Ziffernfolge 1 200 000 000 053 intern durch Entfernen der ZwischenrДume in die
Ziffernfolge 1200000000053 umgeformt.)
Die Eingabe-Kette
prim 1 200 000 000 053
zum Beispiel erzeugt die folgende Ausgabe:
░  ░
Γûæ Γûæ Die Zahl, die in Primfaktoren zerlegt werden soll, Γûæ
Γûô
ΓûÆ Γûæ ist: ΓûÆ Γûô
Γûæ Γûæ 1200000000053 Γûæ Γûæ
ΓûÆ Γûô
Γûæ Γûæ Primfaktor Exponent Γûæ Γûæ
ΓûÆ Γûô
Γûæ Γûæ 1200000000053 1 Γûæ Γûæ
Γûæ Γûæ
Γûæ ΓûÆ Die eingegebene Zahl Γûæ Γûæ
Γûæ Γûæ 1200000000053, ΓûÆ Γûæ
Γûæ Γûæ
Γûæ ΓûÆ die in ihre Primfaktoren zerlegt werden soll, ist selbst eine
Primzahl. Γûæ Γûæ
Γûæ Γûæ
Beispiele fБr erfolgreiche Zerlegungen:
Die Eingabe-Kette
Prim 39 442 372 387 147 114 006 181 929 906 022 200
erzeugt die folgende Ausgabe:
░  ░
░  ░ Die Zahl, die in Primfaktoren zerlegt werden soll, ▒
ΓûÆ
ΓûÆ Γûæ ist: ΓûÆ Γûæ
Γûô Γûæ 39442372387147114006181929906022200 Γûæ Γûæ
Γûæ Γûæ
Γûæ Γûæ Primfaktor Exponent ΓûÆ Γûæ
Γûæ Γûæ
Γûæ Γûæ 2 3 Γûæ Γûæ
Γûæ Γûæ 5 2 Γûæ Γûæ
Γûæ Γûæ 11 1 Γûæ Γûæ
Γûæ Γûæ 13 2 Γûæ Γûæ
Γûæ Γûæ 17 3 Γûæ Γûæ
Γûæ Γûæ 23 3 Γûæ Γûæ
Γûæ ΓûÆ 29 1 Γûæ Γûæ
Γûæ Γûæ 4871 3 Γûæ Γûæ
Γûæ Γûæ 23011 2 Γûæ Γûæ
Γûæ Γûæ
Γûæ ΓûÆ Der Wert des Produktes, Γûæ Γûæ
ΓûÆ Γûæ dessen Faktoren die einzelnen Potenzen "Primfaktor hoch Exponent"
sind, Γûæ Γûæ
ΓûÆ Γûæ ist: Γûæ Γûæ
Γûæ Γûæ 39442372387147114006181929906022200 Γûæ Γûæ
Γûæ Γûæ
In dieser Darstellung ist zunДchst die um etwaige Leerstellen reduzierte
eingegebene ganze Zahl zu sehen, die in ihre Primfaktoren zerlegt werden soll.
Wird keine ganze Zahl eingegeben, erscheint eine diesbezБgliche Fehlermeldung.
Darunter wird der Betrag jedes Primfaktors und seines Exponenten angegeben.
Der Exponent besagt, wie oft dieser Primfaktor in dieser Zahl vorhanden ist.
Zur Kontrolle werden alle ermittelten Primfaktoren mit einander multipliziert,
um eine Kontrolle zu haben, ob auch alle Primfaktoren ermittelt worden sind
(Produkt, dessen Faktoren die einzelnen Potenzen "Primfaktor hoch Exponent"
sind).
Ein Rechner mit einem Pentium Pro, 200 MHz Taktgeschwindigkeit und ausreichend
Hauptspeicher fБhrt die hier dargestellte Berechnung in 2 Sekunden aus.
Die Eingabe-Kette
Prim 1 969 911 333 706 466 162 042 672 657 103
als nДchstes Beispiel erzeugt die folgende Ausgabe:
░  ░
░  ░ Die Zahl, die in Primfaktoren zerlegt werden soll, ▒
ΓûÆ
ΓûÆ Γûæ ist: ΓûÆ Γûæ
Γûô Γûæ 1969911333706466162042672657103 Γûæ Γûæ
Γûæ Γûæ
Γûæ Γûæ Primfaktor Exponent ΓûÆ Γûæ
Γûæ Γûæ
Γûæ Γûæ 3 3 Γûæ Γûæ
Γûæ Γûæ 11 2 Γûæ Γûæ
Γûæ Γûæ 1459 1 Γûæ Γûæ
Γûæ Γûæ 4261 1 Γûæ Γûæ
Γûæ Γûæ 4871 2 Γûæ Γûæ
Γûæ Γûæ 448631 1 Γûæ Γûæ
Γûæ ΓûÆ 9111821 1 Γûæ Γûæ
Γûæ Γûæ
Γûæ ΓûÆ Der Wert des Produktes, Γûæ Γûæ
ΓûÆ Γûæ dessen Faktoren die einzelnen Potenzen "Primfaktor hoch Exponent"
sind, Γûæ Γûæ
ΓûÆ Γûæ ist: Γûæ Γûæ
Γûæ Γûæ 1969911333706466162042672657103 Γûæ Γûæ
Γûæ Γûæ
Ein Rechner mit einem Pentium Pro, 200 MHz Taktgeschwindigkeit und ausreichend
Hauptspeicher fБhrt die hier dargestellte Berechnung in 26 Sekunden aus.
Die Eingabe-Kette Prim 18 363 498 557 203 867 896 295 861 193 451
655 574 494 195 634 077 086 553
als nДchstes Beispiel erzeugt die folgende Ausgabe:
░  ░
░  ░ Die Zahl, die in Primfaktoren zerlegt werden soll, ▒
ΓûÆ
ΓûÆ Γûæ ist: ΓûÆ Γûæ
Γûô Γûæ 18363498557203867896295861193451655574494195634077086553 Γûæ Γûæ
Γûæ Γûæ
Γûæ Γûæ Primfaktor Exponent ΓûÆ Γûæ
Γûæ Γûæ
Γûæ Γûæ 7 9 Γûæ Γûæ
Γûæ Γûæ 13 6 Γûæ Γûæ
Γûæ Γûæ 113 4 Γûæ Γûæ
Γûæ Γûæ 1471 3 Γûæ Γûæ
Γûæ Γûæ 3491 1 Γûæ Γûæ
Γûæ Γûæ 5501 2 Γûæ Γûæ
Γûæ ΓûÆ 811819 1 Γûæ Γûæ
Γûæ Γûæ 2118209 1 Γûæ Γûæ
Γûæ Γûæ
Γûæ ΓûÆ Der Wert des Produktes, Γûæ Γûæ
ΓûÆ Γûæ dessen Faktoren die einzelnen Potenzen "Primfaktor hoch Exponent"
sind, Γûæ Γûæ
ΓûÆ Γûæ ist: Γûæ Γûæ
Γûæ Γûæ 18363498557203867896295861193451655574494195634077086553 Γûæ Γûæ
Γûæ Γûæ
Ein Rechner mit einem Pentium Pro, 200 MHz Taktgeschwindigkeit und ausreichend
Hauptspeicher fБhrt die hier dargestellte Berechnung in 45 Sekunden aus.
Man erkennt an diesen Beispielen, daс auch eine 56-stellige ganze Zahl in ihre
Primfaktoren vollstДndig zerlegt werden kann, wenn diese nicht zu groс sind.
Man kann also immerhin den Versuch unternehmen, eine unbekannte vielstellige
Zahl mit prim.CMD in ihre Primfaktoren zu zerlegen.
ΓòÉΓòÉΓòÉ 10. Anhang ΓòÉΓòÉΓòÉ
Im Anhang sind die einzelnen mathematischen Funktionen, die von kzr.CMD
verwendet werden kФnnen, in
individuellen Unterabschnitten erklДrt.
ΓòÉΓòÉΓòÉ 10.1. Sinusfunktion ΓòÉΓòÉΓòÉ
Die Sinusfunktion sin(x)
kann im Bereich |x| < 1.0E+8
mit fast beliebiger Genauigkeit
(ND <= 450) berechnet werden.
ΓòÉΓòÉΓòÉ 10.2. Cosinusfunktion ΓòÉΓòÉΓòÉ
Die Cosinusfunktion cos(x)
kann im Bereich |x| < 1.0E+8
mit fast beliebiger Genauigkeit
(ND <= 450) berechnet werden.
ΓòÉΓòÉΓòÉ 10.3. Tangensfunktion ΓòÉΓòÉΓòÉ
Die Tangensfunktion tan(x)
kann im Bereich |x| < 1.0E+8
mit fast beliebiger Genauigkeit
(ND <= 450) berechnet werden.
ΓòÉΓòÉΓòÉ 10.4. Cotangensfunktion ΓòÉΓòÉΓòÉ
Die Cotangensfunktion cot(x)
kann im Bereich |x| < 1.0E+8
mit fast beliebiger Genauigkeit
(ND <= 450) berechnet werden.
ΓòÉΓòÉΓòÉ 10.5. Hyperbel-Sinusfunktion ΓòÉΓòÉΓòÉ
Die Hyperbel-Sinusfunktion sinh(x)
ist definiert als
exp(+x) - exp(-x)
sinh(x) = ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ .
2
Sie kann im Bereich |x| < 1.0E+8
mit fast beliebiger Genauigkeit
(ND <= 450) berechnet werden.
ΓòÉΓòÉΓòÉ 10.6. Hyperbel-Cosinusfunktion ΓòÉΓòÉΓòÉ
Die Hyperbel-Cosinusfunktion cosh(x)
ist definiert als
exp(+x) + exp(-x)
cosh(x) = ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ .
2
Sie kann im Bereich |x| < 1.0E+8
mit fast beliebiger Genauigkeit
(ND <= 450) berechnet werden.
ΓòÉΓòÉΓòÉ 10.7. Hyperbel-Tangensfunktion ΓòÉΓòÉΓòÉ
Die Hyperbel-Tangensfunktion tanh(x)
ist definiert als
exp(+x) - exp(-x)
tanh(x) = ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ .
exp(+x) + exp(-x)
Sie kann im Bereich |x| < 1.0E+8
mit fast beliebiger Genauigkeit
(ND <= 450) berechnet werden.
ΓòÉΓòÉΓòÉ 10.8. Hyperbel-Cotangensfunktion ΓòÉΓòÉΓòÉ
Die Hyperbel-Cotangensfunktion coth(x)
ist definiert als
exp(+x) + exp(-x)
coth(x) = ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ .
exp(+x) - exp(-x)
Sie kann im Bereich |x| < 1.0E+8
- der Wert x=0 ist aber nicht erlaubt -
mit fast beliebiger Genauigkeit
(ND <= 450) berechnet werden.
ΓòÉΓòÉΓòÉ 10.9. Arcus-Sinusfunktion ΓòÉΓòÉΓòÉ
Der Hauptwert der Funktion arcsin(x)
kann im Bereich |x| є 1
mit fast beliebiger Genauigkeit
(ND <= 450) berechnet werden.
ΓòÉΓòÉΓòÉ 10.10. Arcus-Cosinusfunktion ΓòÉΓòÉΓòÉ
Der Hauptwert der Funktion arccos(x)
kann im Bereich |x| є 1
mit fast beliebiger Genauigkeit
(ND <= 450) berechnet werden.
ΓòÉΓòÉΓòÉ 10.11. Arcus-Tangensfunktion ΓòÉΓòÉΓòÉ
Der Hauptwert der Funktion arctan(x)
kann im Bereich |x| < ь
mit fast beliebiger Genauigkeit
(ND <= 450) berechnet werden.
ΓòÉΓòÉΓòÉ 10.12. Arcus-Cotangensfunktion ΓòÉΓòÉΓòÉ
Der Hauptwert der Funktion arccot(x)
kann in den Bereichen
-ь < x < 0 und 0 < x +ь
mit fast beliebiger Genauigkeit
(ND <= 450) berechnet werden.
Anmerkung:
Der Hauptwert der Funktion arccot(x)
geht fБr x ─> -ь gegen -0
und fБr x ─> -0 gegen -у/2.
An der Stelle x = 0
ist die Funktion arccot(x)
- und daher auch deren Hauptwert -
nicht erklДrt. Der Hauptwert der Funktion arccot(x)
geht fБr x ─> +0 gegen +у/2
und fБr x ─> +ь gegen +0.
Diese Definion des Hauptwertes
der Funktion arccot(x) ist offenbar
die jБngste Festlegung [3].
In der Literatur findet man
gelegentlich eine andere Definition,
zum Beispiel in [2].
ΓòÉΓòÉΓòÉ 10.13. Area-Sinusfunktion ΓòÉΓòÉΓòÉ
Der Hauptwert der Funktion arsinh(x)
kann im Bereich -ь < x < +ь
mit fast beliebiger Genauigkeit
(ND <= 400) berechnet werden.
ΓòÉΓòÉΓòÉ 10.14. Area-Cosinusfunktion ΓòÉΓòÉΓòÉ
Der Hauptwert der Funktion arcosh(x)
kann im Bereich x Є 1
mit fast beliebiger Genauigkeit
(ND <= 400) berechnet werden.
ΓòÉΓòÉΓòÉ 10.15. Area-Tangensfunktion ΓòÉΓòÉΓòÉ
Der Hauptwert der Funktion artanh(x)
kann im Bereich |x| < 1
mit fast beliebiger Genauigkeit
(ND <= 400) berechnet werden.
ΓòÉΓòÉΓòÉ 10.16. Area-Cotangensfunktion ΓòÉΓòÉΓòÉ
Der Hauptwert der Funktion arcoth(x)
kann im Bereich |x| > 1
mit fast beliebiger Genauigkeit
(ND <= 400) berechnet werden.
ΓòÉΓòÉΓòÉ 10.17. Exponentialfunktion ΓòÉΓòÉΓòÉ
Die Exponentialfunktion exp(x)
kann im Bereich |x| < 1.0E+9
mit fast beliebiger Genauigkeit
berechnet werden.
ΓòÉΓòÉΓòÉ 10.18. Potenzfunktion ΓòÉΓòÉΓòÉ
Die Potenz-Funktion pot(x,y)
-- x hoch y --
kann im Bereich |y*ln(|x|)| < 1.0E+9
mit einer Genauigkeit
von maximal 400
Dezimalstellen berechnet werden.
ΓòÉΓòÉΓòÉ 10.19. Funktion 2. Wurzel ΓòÉΓòÉΓòÉ
Die zweite Wurzel sqrt(x)
kann im Bereich
1.0E-10000 < x < 1.0E+10000
mit fast beliebiger Genauigkeit
(ND <= 450) berechnet werden.
ΓòÉΓòÉΓòÉ 10.20. Funktion 3. Wurzel ΓòÉΓòÉΓòÉ
Die dritte Wurzel root3(x)
kann im Bereich
1.0E-10000 < x < 1.0E+10000
mit fast beliebiger Genauigkeit
(ND <= 450) berechnet werden.
ΓòÉΓòÉΓòÉ 10.21. Logarithmus zur Basis e ΓòÉΓòÉΓòÉ
Der natБrliche Logarithmus ln(x)
kann im Bereich
1.0E-100000 < x < 1.0E+100000
mit fast beliebiger Genauigkeit
(ND <= 450) berechnet werden.
ΓòÉΓòÉΓòÉ 10.22. Logarithmus zur Basis 10 ΓòÉΓòÉΓòÉ
Der Logarithnus zur Basis 10: log(x)
kann im Bereich
1.0E-100000 < x < 1.0E+100000
mit fast beliebiger Genauigkeit
(ND <= 450) berechnet werden.
ΓòÉΓòÉΓòÉ 10.23. Logarithmus zur Basis 2 ΓòÉΓòÉΓòÉ
Der Logarithmus zur Basis 2: ld(x)
kann im Bereich
1.0E-100000 < x < 1.0E+100000
mit fast beliebiger Genauigkeit
(ND <= 450) berechnet werden.
═══ 10.24. FakultДtsfunktion n! ═══
Die FakultДtsfunktion n!(u)
kann im Bereiche 0 < u <= 6000
fБr ganzzahlige Werte von u
berechnet werden.
FБr u > 6000
werden die Rechenzeiten zu groс.
═══ 10.25. FakultДtsfunktion n!! ═══
Die FakultДtsfunktion n!!(u)
kann im Bereiche 0 < u <= 6000
fБr ganzzahlige Werte von u berechnet werden.
FБr u > 6000 werden die Rechenzeiten zu groс.
ΓòÉΓòÉΓòÉ 10.26. Gammafunktion ΓòÉΓòÉΓòÉ
Die Gamma-Funktion т(x)=ga(x) ist definiert als
FБr x=0 und negative ganzzahlige Werte von x
hat die Gammafunktion Pole und ist dort nicht definiert.
Sie kann im Bereich -3000 < x < +3000
mit einer Genauigkeit
von maximal 50 Dezimalstellen berechet werden.
FБr |x| > 3000 werden die Rechenzeiten zu groс.
ΓòÉΓòÉΓòÉ 10.27. Binomialkoeffizient ΓòÉΓòÉΓòÉ
FБr einen Binomialkoeffizienten
u!
bin(u,v) = ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
v!(u-v)!
mБssen die Bereiche 0 < u <= 2000
und 0 < v <= u
eingehalten werden.
Die Variablen u und v
mБssen ganze Zahlen sein.
═══ 10.28. Gauсsche Fehlerfunktion ═══
Die Gauсsche Fehlerfunktion ш(x)=phi(x)
kann im Bereich -ь < x < +ь
mit einer Genauigkeit
von maximal 50 Dezimalstellen
berechnet werden.
ΓòÉΓòÉΓòÉ 10.29. Fehlerfunktion p_(x) ΓòÉΓòÉΓòÉ
Die Fehlerfunktion p_(x)=(1+ш(x))/2
kann im Bereich -ь < x < +ь
mit einer Genauigkeit
von maximal 50 Dezimalstellen
berechet werden.
Zur Definition von ш(x)
siehe die ErlДuterunge zu phi(x)
ΓòÉΓòÉΓòÉ 10.30. Fehlerfunktion q_(x) ΓòÉΓòÉΓòÉ
Die Fehlerfunktion q_(x)=(1-ш(x))/2
kann im Bereich -ь < x < +ь
mit einer Genauigkeit
von maximal 50 Dezimalstellen
berechet werden.
Zur Definition von ш(x)
siehe die ErlДuterunge zu phi(x)
ΓòÉΓòÉΓòÉ 10.31. Error-Funktion ΓòÉΓòÉΓòÉ
Die Error-Funktion erf(x)
kann im Bereich -ь < x < +ь
mit einer Genauigkeit
von maximal 50 Dezimalstellen
berechet werden.
═══ 10.32. KomplementДre Error-Funktion ═══
Die komplementДre Error-Funktion erfc(x)
kann im Bereich -ь < x < +ь
mit einer Genauigkeit
von maximal 50 Dezimalstellen
berechet werden.
ΓòÉΓòÉΓòÉ 10.33. Modulo-Funktion ΓòÉΓòÉΓòÉ
Die Modulo-Funktion wird hДufig mit der divrest-Funktion von kzr (in einer
REXX-Datei das Doppelsymbol //)
verwechselt. Sie ist nicht identisch mit der divrest-Funktion von kzr , wenn u
und v unterschiedliche Vorzeichen
haben.
Hier ein Beispiel mit u = -235
und v = 17:
mod(u, v) = 3
u divrest v = -14
Die Modulo-Funktion ist folgendermaсen definiert
(Siehe [6], Seite XV, oben):
x = u mod(v) bedeutet: x = m*v + u
mit x, m, und u aus der Menge der ganzen Zahlen
┬╖┬╖┬╖-3,-2,-1, 0, +1, +2, +3,┬╖┬╖┬╖
und v aus der Menge der natБrlichen Zahlen 0, 1, 2, 3,···,
mit Ausnahme der Null.
Die Funktion x = m*v + u
ist unendlich vieldeutig. Daher hat man den am dichtesten bei Null liegenden
Wert als eine Art "Hauptwert" festgelegt.
Die Funktion u mod(v) ist in der Form mod(u,v) programmiert; sie liefert
als Ergebnis den "Hauptwert".
ΓòÉΓòÉΓòÉ 10.34. Kleinster gemeinsamer Teiler ΓòÉΓòÉΓòÉ
Um den kleinsten gemeinsamen Teiler
zweier Zahlen u und v zu ermitteln,
wird der bekannte Algorithmus von
Euclid verwendet.
Siehe hierzu die Seiten 28 oder 33
in [7].
ΓòÉΓòÉΓòÉ 10.35. pi() ΓòÉΓòÉΓòÉ
Die Konstante у = pi() = 3.14159....
kann mit fast beliebiger Genauigkeit
berechet werden.
ΓòÉΓòÉΓòÉ 10.36. e() ΓòÉΓòÉΓòÉ
Die Konstante e = e() = 2.71828.....
kann mit fast beliebiger Genauigkeit
berechet werden.