FMATH wurde ursprünglich entwickelt, weil spezielle Funktionen für astronomische Berechnungen fehlten und mit C / C++ und der Standardbibliothek zu umständlich zu realisieren und zu langsam gewesen wären. Besonderer Wert wurde dabei auf extrem schnelle und dabei genaue Ausführung gelegt. Infrage kam daher nur die direkte Hardware-Programmierung des mathematischen Koprozessors (FPU).
Der der größte Teil des Codes ist in Assembler geschrieben, der Rest in C. Die Bibliothek ist auf INTEL-Prozessoren (und kompatiblen) ab i386 lauffähig. Sie kann die Fähigkeiten des Prozessors und seiner FPU bis hin zum i686 voll ausnutzen. Zur Benutzung und zum Übersetzen wird unbedingt der GNU C Compiler gcc gebraucht, der für alle Betriebssysteme erhältlich ist.
Die Bibliothek enthält jede Funktion in drei Genauigkeitsstufen für single, double und long double Variablen (32, 64 und 80 Bit Wortbreite entsprechend etwa 7, 15 und 19stelliger Genauigkeit). Die Fähigkeit des gcc komplexe Zahlen wie eine einzelne Variable zu behandeln wird durch spezielle Funktionen wesentlich erweitert. Zur weiteren Geschwindigkeitssteigerung gibt es für viele Funktionen die Möglichkeit der Inline-Ersetzung. Der zeitraubende Vorgang des Funktionsaufrufs mit Parameterübergabe und Funktionswert-Rückgabe wird dadurch umgangen, dass die Funktion nicht mehr aufgerufen wird; der Compiler setzt statt dessen eine angepasste Assemblervariante direkt in den Objektcode ein.
Die Fehlerbehandlung ist gegenüber der Standardbibliothek stark verbessert. Die Funktionen liefern auch für indefinite Zahlen (Infinities und NaNs) sinnvolle Ergebnisse. Im Fehlerfall kann der Benutzer über Art und Ort des Fehlers informiert werden. Wenn möglich findet auch eine automatische Fehlerkorrektur statt. Trotz allem wird ein Exception-Handler signal(SIGFPE,)... nicht benutzt.
Für Linux werden statische Bibliotheken und Shared-Libraries erzeugt. OS/2 erzeugt die entsprechenden DLLs, die statischen Bibliotheken können auch unter DOS gelinkt werden.
Die Bibliothek ist eine Sammlung verschiedenster Funktionen:
- Funktionen der ANSI-C Standardbibliothek
Alle mathematischen ANSI-C Standardfunktionen die auch in deklariert sind.
- Hyperbolische und inverse hyperbolische Funktionen.
Die Funktionen liefern auch in der Nähe von 0 (und für Hyperbel-Kosinus in der Nähe von 1) genaue Ergebnisse.
- Exponentialfunktionen
Potenzen zur Basis 2, e, 10 und beliebig, mit Varianten die auch für kleine Werte genaue Resultate liefern. Kubikwurzel...
- Logarithmusfunktionen
Logarithmen zur Basis 2, e, 10 und beliebig, mit Varianten die auch für kleine Werte genaue Resultate liefern. Hardware-Logarithmen...
- Rundungsfunktionen
Auf- und Abrunden, Abschneiden und Runden zur nächsten Zahl jeweils in Fließkomma und Ganzzahlarithmetik. Runden auf feste Nachkomma-Stellenzahl.
- Komplexe Funktionen
Alle Standardfunktionen sind auch als komplexe Funktionen verfügbar.
- Statistische Funktionen und Datenanalyse
Fakultät, Gammafunktion, Kombination, Permutation, KGV, GGT, Fehlerfunktionen, Wahrscheinlichkeitsintegrale, Zufallszahlen verschiedener Güte. Lineare, logarithmische, exponentielle und Potenz-Regressionsanalyse. Mehrfache lineare und Polynom-Regression nach der Methode der kleinsten Fehler-Quadrate.
- Approximation und Interpolation
Tabellen-Interpolation mit 3 und 5 Stützstellen zum Tabellenwert, Nullstelle und Extremum. Lagrange-Interpolation, Tschebyscheff-Approximation mit ein, zwei und drei Variablen. Nullstellenbestimmung.
- Zahlzerlegungen
Vorzeichen, Absolutwert, Ganzzahl, Dezimalrest, Modulo....
- Vektorrechnung
Addition, Multiplikation, Rotation, Einheitsvektor....
- Matrix-Operationen
Addition, Multiplikation, Determinante, lineares Gleichungssystem, Rotation... in jeweils 3×3-Matrix und frei wählbaren Dimensionen.
- Weitere Funktionen
Viele eingebaute Konstante, Besselfunktionen, Polynomrechnung, Umrechnung und Reduktion Grad <-> Radiant. Umwandlung von polaren, sphärischen und rechtwinkligen Koordinaten. Binäre, hexadezimale, sexagesimale, römische und IEEE-Zahlen...
- Fehlerbehandlung und Rechengangkontrolle
Low-Level Zahlenuntersuchungen, Fehlermeldungen, FPU-Steuerung, Hardware-Untersuchung, Ermittlung der Rechengeschwindigkeit, Profiling und Debugging.
Hier geht es zur Homepage:
libfmath