Zitat:
So weit ich weiß, kann Hagens Mathe-
Unit doch keine Dezimalzahlen oder ?
Das stimmt auch, und denoch kannst du mit Gebrochenen Zahlen rechnen. DECMath enthält den Datentyp IRational, der einen Bruch repräsentiert.
Auch deine zweite Forderung nach Einfachheit der Anwendung erfüllt DECMath:
Delphi-Quellcode:
var
A,B,C: IRational;
begin
NSet(A, 1, 3); // A = 1/3
NSet(B, 4, 5); // B = 1/5
NSet(C, 0.12345678);
NMul(A, C);
NAdd(A, B);
WriteLn( NStr(A) );
// auf Bruch zugreifen
WriteLn( NStr(A.N) ); // Numerator
WriteLn( NStr(A.D) ); // Denumerator
end;
Klar, du müsstest noch einige Spezialfunktionen selber basteln zb. Wurzel usw. Allerdings hast du bei den IRational einen entscheidenden Vorteil gegenüber jedem Fließkommadatentyp -> sie haben immer eine wesentlich höhere Genauigkeit, in fact genauer geht es garnicht mehr
Fließkommadatentypen sind wesentlich komplexer in der Programmierung ermöglichen dann aber eine enfachere Anwendung weil man einmal die Gesamtgenauigkeit festlegen kann und dann seine Formel reinhämmert. Bei IRational wäre das im Grunde ebenso einfach und denoch muß man bei seinen Formeln genauer auf die erzielten Genauigkeiten achten.
Da man wie oben gesehen auf den Nummerator und Denummerator des Bruches Zugriff hat kann man jede Formel auch auf die Anwendung von Ganzzahlen hin optimieren und umstellen und so die maximal höchste Auflösung/Genauigkeit erreichen.
Ansonsten, bevor du mit DECMath oder den
JEDI's (wobei ich nicht weis wo die eine arbitrary Integer/Floatingpoint Library haben sollen ?) was anfängst solltest du dich mal im C++,C#,JAVA Sektor umschauen. Es gibt dort eine wesentlich größere Auswahl. ApFloat kann ich empfehlen.
Gruß Hagen