![]() |
Re: die deutsche StringMatheLib ._.
ahhhh, dann haben die das wohl doch schon ausgebessert :shock:
hatte mal das Problem hiermit,
Delphi-Quellcode:
wo einfach nur der obere Teil abgeschnitten wurde und am Ende auch 'b' angezeigt wurde :wall:
Var W: WideChar;
W := '0'; // #$0034 If W in ['0'..'9'] Then ShowMessage('a'); W := #$1034; If W in ['0'..'9'] Then ShowMessage('b'); na gut, aber die Warnmeldung gefällt mir dann dennoch nicht, vorallem wo Delphi schon seit vielen Jahren auch mit mehr, als einem Byte klarkommt, solange es die Möglichkeit zum Kürzen/Optimieren hat ... Integer und Word sind ja locker möglich, nur WideChar (=Word) nicht :? nja, ... - MatheString jetzt als String - der Operatoren-Record in MatheString umbenannt - und gegen die nervigen Compiler-Hinweise hab ich auch was garnicht soooooo unschönes gefunden :angel2: - einige fehlende Dinge noch in den Record durchgeschleift - alle Dateien im ![]() |
Re: die deutsche StringMatheLib ._.
Bevor Du die Sache weiter ausbaust, hier ein paar Bugs/Features :)
- QuotientModulo('7','-3') liefert Quotient -2, Rest -1. Richtig ist Quotient -2, Rest +1. Es ist zwar immer wieder ein Graus, daß -7 mod 3 = -1 sein soll (und nicht 2), aber das ist wenigstens mit Pascal kompatible. - Sinnvoll ist mM auch die Verwendung von Fehler "reRangeError" bei Wurzeln, Potenzen etc; denn "reInvalidOp" liefert "Invalid floating point operation" und das ist bei einer Ganzzahlbibliothek doch etwas unerwartet. |
Re: die deutsche StringMatheLib ._.
Hm äähm,
mir verschliesst sich momentan der Sinn des Ganzen. Für was benutzt man diese Unit. Rechnen kann ich ja auch so oder? Für die Addition: c:=floattostr(strtofloat(a)+strtofloat(b)) Warum dann der immense Aufwand? Das ist doch alles, oder entgeht mir da was? Viele Grüsse! |
Re: die deutsche StringMatheLib ._.
Zitat:
Zitat:
Delphi-Quellcode:
:zwinker: Die Unit ist zum genauen Rechnen mit großen (sehr großen) Zahlen gedacht.
a := '1'+ StringOfChar('0',10000000000);
b := '2'+ StringOfChar('1',maxint); c:=floattostr(strtofloat(a)+strtofloat(b)) Zitat:
|
Re: die deutsche StringMatheLib ._.
ja schon, aber hier geht es um großere ganzzahlen als int64, die dargestellt werden sollen
deshalb kann man die normalen, in delphi integrierten, fkt's nicht benutzen |
Re: die deutsche StringMatheLib ._.
Zitat:
Die Funktionen, welche dir Delphi/der PC bietet, arbeiten maximal mit 20 Dezimalstellen ... wenn die Zahl mehr Dezimalstellen hat, dann sind die Nachfolgenden Aufgrund der internen Art der Speicherung undefiniert, also bei Extended und Co. Int64 hat maximal 19 Dezimalstellen. Hier sind weit mehr Dezimalstellen möglich. Ansonsten hat es, so wie diese Lib aufgebaut ist, mehr einen spielerischen Lernfaktor. (hier ist zwar viel möglich, aber nicht unbedingt schnell ... für schnelle Berechnungen gibt es weitaus Beseres, aber es Rechnet "jetzt" immer genau und das bis zu letzten Dezimalstelle und der Code ist recht einfach und Verständlich ... falls mal wer da gern reinguck und etwas verstehen will) In ein/zwei Minütchen sind dann auch alle Dateien wieder UpToDate und ohne diesen Fehler bim MOD :oops: (hatte die Vorzeichen einfach nur falsch behandelt) |
Re: die deutsche StringMatheLib ._.
ach ja, himitsu.
wenn ich jetzt noch wüsste, wie ich die lib in meine unit einbinde, und die fkt's benutze, dann wäre alles super. weitere fehler habe ich keine gefunden beim test, aber benutzen würde ich sie schon gerne in meinem project. nochmal danke für die mühe thx |
Re: die deutsche StringMatheLib ._.
Ja eigentlich recht einfach
- erstmal entscheiden, welche Version man möchte > mit Objekt (diese wäre auch Threadsicher, wenn je Thread ein eigenes Objekt genutzt würde) > als Record/MatheString
Delphi-Quellcode:
Uses StringMatheLib; // Unit eintragen
Var Mathe: TMathe; // an passender Stelle das Objekt definieren a, b, c: String; // Variablen definieren Mathe := TMathe.Create; // dieses Objekt erstellen a := '123'; // nun dieses benutzen c := Mathe.Summe(a, b); // ... c := Mathe.Potenz(a, b); // Edit1.Text := c; Edit2.Text := Mathe.Format(c, True, False); ... Mathe.Free; // und am Ende noch aufräumen
Delphi-Quellcode:
Uses StringMatheRec; // Unit eintragen
Var a, b, c: MatheString; // Variablen definieren a := '123'; // nun dieses benutzen c := a * b; // ... c := Power(a, b); // Edit1.Text := c; Edit2.Text := c.Format(True, False); ... // hier wird das nötige TMathe-Objekt intern automatisch erstellt und freigegeben |
Re: die deutsche StringMatheLib ._.
Noch ein schwerer Bug in PotenzModulo sollte es heißen
Delphi-Quellcode:
statt "istPositiv(b)", denn sonst kommt man in Endlosschleifen zb für 2^11 mod 13.
While Vergleich(b,'0',vGroesser) do Begin
|
Re: die deutsche StringMatheLib ._.
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz