Discussion:
Dividieren von Großen Zahlen - vereinfacht ... ?
(zu alt für eine Antwort)
Jens Kallup
2020-12-05 23:25:27 UTC
Permalink
Hallo,

Heute habe ich etwas beim suchen von Varianten bezüglich
der Division zweier Zahlen heraus gefunden:

Wenn man zum Beispiel die Aufgabe 3.245 : 247 = ?
hat, stehen viele mit Pferdefuß da.

Als erstes sollte man sich im klaren werden, in welchen
Bereich man agiert.
So wird der erste Schritt sein, die Menge der Digits zu
berechnen, die möglicherweise in Frage kommen.

In der obigen gestellten Aufgabe hat man einen Dividenden
mit 4 Digit's, während der Divisor 3 hat.

Man brauch also nur 4 x 3 = 12 rechnen, und erhält als
Ergebnis: 12 Digit's.

1. Schritt: Überschlagsrechnung:
wir schauen uns die letzte Ziffer/Digit des Dividenden an.
Ok, das ist 5.
Wir erweitern mit 10 - also 5 x 10 = 50
Jetzt schauen wir und im Divisor die letzte Ziffer an und
überlegen uns, wieviel mal die 7 in die 50 passt...
Okay, 8 mal.
Das heißt:

1. Block: 5 * 10
50 : 7 = 49 : 7 = 8 Rest: 1 | 7 := 3. Ziffer vom Divisor
50 : 4 = 40 : 4 = 10 Rest: 10 | 4 := 2. ...
10 : 4 = 2 Rest: 2 -> dafür entfällt dann Rest: 10
-> wichtig !
50 : 2 = = 25 Rest: 0 | 2 := 1. ...
---------------------------------------------
Zwischen-Summe: Rest: 3 -> merken !!!

2. Block: 4 * 100
400 : 7 = 350 : 7 = 50 Rest: 50 | hier Null streichen:
49 : 7 = 8 Rest: 1 |

400 : 4 = = 100 Rest: 0 | wir können hier die 0 Blöcke
400 : 2 = = 200 Rest: 0 | streichen
----------------------------------------------
Zwischen-Summe 1 x 5 = 5

3. Block: 2 * 1000
200 : 7 = 140 : 7 = 20 Rest: 60
49 : 7 = + 8
7 : 7 = + 1
----------------------------------
Zwischen-Summe: 29 -> wir merken uns: 2 + 9 = 11 1 + 1 = 2

200 : 4 = 200
200 : 2 = 100 -> 2 + 1 = 3 3 + 2 = 5 (siehe oben)

4. Block: 3 * 10000
30000 : 7 = 400 Rest 200
200 : 7 =
140 : 7 = + 20
49 : 7 = + 8
7 : 7 = + 1 Rest: 1
-----------------------------------------------
= 29 -> 2+9 = 11 -> 1+1 = 2

30000 : 4 =
28 : 4 = 7 Rest 2

30000 : 2 = 15 -> 1 + 5 = 6
-> 2 + 5 = 7

-> 6 + 7 = 13

und zum Schluß noch:

140 : 7 = 20 Rest 10
14 : 7 = 2 Rest -1 -> 14 - 1 = 13


Jetzt ist die Aufgabe gespiegelt, im Gegensatz zu der
Multiplikation.

Denn wir Wissen, ja, dass die Division das Gegenteil der
Multiplikation, und die Multiplikation das Gegenteil der
Division ist.

Wir addieren alle Zwischen-Ergebnisse zusammen:

+ 8000
+ 0100
+ 0020
+ 0005
+ 0003
------
= 8128

+ 00001000
+ 00000500
+ 00000060
+ 00000007
----------
= 8128156700
+ 0000000031
------------
= 8128156731,31 | Komma nicht vergessen !!!

wir geben nun die Zahl in den Computer ein:
Der Computer ließt ja von rechts nach links, gibt
aber Werte wiederum von link nach rechts aus:
Also:

8128156731,31 wird zu

13,1376518218

Wie wir sehen können, sind wie oben schon beschrieben:
12 Ziffern / Digit's in unserer Rechnung enthalten.

Toll oder?

Frohen 2. Advent

Jens
Juergen Ilse
2020-12-06 01:51:45 UTC
Permalink
Hallo,
Post by Jens Kallup
Heute habe ich etwas beim suchen von Varianten bezüglich
Wenn man zum Beispiel die Aufgabe 3.245 : 247 = ?
hat, stehen viele mit Pferdefuß da.
Inwiefern ist das ein allgemeingueltiger fuer beliebige Werte geltender
Algorithmus? Wo ist der Beweis der Allgemeingueltigket? Wenn er allge-
meingueltig waere, inwiefern ist der ganze Kram schneller als die ein-
fache schriftliche Division? Die schriftliche Division erlaubt die Be-
rechnung mit verschiedenen Genauigkeite. Ist das bei dem von dir be-
schriebenen Verfahren ebenfalls der Fall? Und wenn ein Computer zum
Einsatz kommen soll, warum laesst man den nicht diie gesamte Rechnung
ausfuehren?

Ich gebe zu, ich habe mir den ganzen Sims noch nicht einmal durchgelesen,
aber schon beim ersten fluechtigen ueberfliegen hatte ich nicht den Ein-
druck, dass dieses Verfahren (wenn es dennallgemeingueltig fuer beliebige
Werte anwendbar waere) wesentlich attraktiver als die schriftliche Division
waere. Ich habe zum ueberfliegender des ersten Absatzes fast so lange
gebraucht, wie fuer eine erste Abschaetzung mit dem rgebnis "etwas mehr
als 13" (etwas mehr als 3250/250, was genau jene 13 ergeben wuerde) ...


Tschuess,
Juergen Ilse (***@usenet-verwaltung.de)
Jens Kallup
2020-12-06 12:46:23 UTC
Permalink
Post by Juergen Ilse
gebraucht, wie fuer eine erste Abschaetzung mit dem rgebnis "etwas mehr
als 13" (etwas mehr als 3250/250, was genau jene 13 ergeben wuerde) ...
Beim Topic/Betreff habe ich ja schon nach "vereinfacht"
ein Fragezeichen gestellt.
Natürlich hast Du recht, wenn man das ganze mit Überschlags-
rechnen hinbekommt.

Ich war nur erstaunt darüber, dass, wenn man dieses Verfahren
anwendet, zu fast dem selben Ergebnis kommt.

Du fragst, warum ich das so mache:
Nun, ich bin dabei, in Pascal (Programmiersprache) einen Mathe-
solver zu basteln, bei dem man zwei beliebige Zahlen angibt und
diese versucht zu dividieren.

Dabei handelt es sich um zwei Zeichenketten, die ich sage jetzt
mal 2048 Zeichen (Ziffern) enthalten können, aber zu einen
richtigen Ergebnis führen.
Normale ALDI Taschenrechner können zum Beispiel nur 9 ibs 10
Zeichen (Ziffern) verarbeiten - gegenüber meinen Solver 2048.

Wie ich schon sicherlich geschrieben habe, funktionieren in dem
Solver bereits: addition, subtraktion, und multiplikation.

Wer das ganze mitverfolgen will, den kann ich gerne den Quellcode
zur Verfügung stellen.

Nun zu dem Punkt, wie man die Division noch einführt (im Solver)

Selbstverständlich kann man die Präzision des End-Resultat's
selbst bestimmen.
Standardmäßig ist die aber bei dem vom mir vorgestellten Verfahren
auf 12 Ziffern beschränkt:
zum Beispiel Dividend: 1234 = 4 Ziffern
zum Beispiel Divisor: 123 = 3 Ziffern -> 4 * 3 = 12

Das gesamte Ergebnis kann also erst einmal eine Genäuigkeit von
10 Zeichen nach dem Komma haben, sowie
2 Zeichen vor dem Komma.

Jetzt muss man sich bei der Division von Großen Zahlen, das man das
halbschriftliche Verfahren zu Grund legt.
Also:

2300 : 7 =

Die 3 * 7 liegt mit 21 ja nah an 23:
300 : 7 = ?
210 : 7 = + 30 Rest 90
70 : 7 = + 10 Rest 10 10 - 7 = 3
7 : 7 = + 1 Rest 3
--------------------------
= 413

Letzte Ziffer (beachte: Spiegelung (vorn))
wäre eine gerundete 2(8) := 3,
also 413,
dann 3 merken, für Schluss.

2000 : 7 = ?
1400 : 7 = + 200 Rest 0
560 : 7 = + 80 Rest 40
35 : 7 = + 5 Rest 5 | 5 - 7 = -2 < 0
7 : 7 = + 1 Rest 0 | => 5 + 2 = 7
--------------------------
= 285
= 2857413

die germerkte 3 an erste Stelle mit gesetzten Komma:

= 328,57413

Im Prinzip ist das ja eigentlich nicht neu, wie ich
feststellen kann.
Man unterteilt die Zahlen in Blöcke, schaut was ist
am nächsten und macht die Probe.

Für meines Erachtens ist diese, hier vorgestellte,
Methode am Resourcen-freundlichste.
Weil ich meine, bei der schriftlichen Division viel
Platz eingenommen wird, während man hier einen kleinen
Teil sparen kann.

Man geht also nicht wie üblich von links nach rechts,
sondern von rechts nach links.

Jens
Torn Rumero DeBrak
2020-12-06 13:24:57 UTC
Permalink
Warum machst Du Dir die ganze Arbeit? Es gibt doch schon die GNU
Multiple Precision Arithmetic Library, see https://gmplib.org/,
zur freien Verfügung.
Jens Kallup
2020-12-06 14:10:41 UTC
Permalink
Post by Torn Rumero DeBrak
Warum machst Du Dir die ganze Arbeit? Es gibt doch schon die GNU
Multiple Precision Arithmetic Library, see https://gmplib.org/,
zur freien Verfügung.
Hallo Torn,

zur Zeit arbeite ich mit Windows 10.
Und da habe ich in einen Artikel gelesen, das Microsoft
immer noch damit beschäftigt ist, Fehler in der CPU zu
patchen.

Das hört mich also nicht gut danach aus, als wäre Win10
im Stande gute und präzise Ergebnisse zu liefern.

Mein weiteres Denken bei diesem Thread hier war, das
Computer ja nur eine bestimmte Bit-Breite haben.
Also die Breite gibt zugleich die Größte bearbeitbare
Zahl an.
Und die liegt bei
32-Bit Computers bei 2^(32) und die
64-Bit Computers bei 2^(64)
...

Ich bin mir im klaren, das es auch 128 oder 256-Bit
Arithmetik geben wird.
Allerdings habe ich festgestellt das dies zum Leiden
der Präzision geht.
So werden einfache, astronomische Berechnungen mit
Exponent und Mantisse angezeigt - kennt man ja.

Darüber hinaus wird bei Üblauf der Bit-Breite einfach
bei 0, 1, 2 ... gezählt, was natürlich zu weiteren
Rechenfehlern führt.

Danke für den Link.
Werde ich mir mal bei Gelegenheit anschauen.

Gruß, Jens
Torn Rumero DeBrak
2020-12-06 16:54:57 UTC
Permalink
Post by Jens Kallup
Post by Torn Rumero DeBrak
Warum machst Du Dir die ganze Arbeit? Es gibt doch schon die GNU
Multiple Precision Arithmetic Library, see https://gmplib.org/,
zur freien Verfügung.
Hallo Torn,
zur Zeit arbeite ich mit Windows 10.
Und da habe ich in einen Artikel gelesen, das Microsoft
immer noch damit beschäftigt ist, Fehler in der CPU zu
patchen.
Das hört mich also nicht gut danach aus, als wäre Win10
im Stande gute und präzise Ergebnisse zu liefern.
Mein weiteres Denken bei diesem Thread hier war, das
Computer ja nur eine bestimmte Bit-Breite haben.
Also die Breite gibt zugleich die Größte bearbeitbare
Zahl an.
Und die liegt bei
32-Bit Computers bei 2^(32) und die
64-Bit Computers bei 2^(64)
...
Ich bin mir im klaren, das es auch 128 oder 256-Bit
Arithmetik geben wird.
Allerdings habe ich festgestellt das dies zum Leiden
der Präzision geht.
So werden einfache, astronomische Berechnungen mit
Exponent und Mantisse angezeigt - kennt man ja.
Darüber hinaus wird bei Üblauf der Bit-Breite einfach
bei 0, 1, 2 ... gezählt, was natürlich zu weiteren
Rechenfehlern führt.
Danke für den Link.
Werde ich mir mal bei Gelegenheit anschauen.
Gruß, Jens
Beispiel zur Benutzung von GMP findest Du unter
https://de.wikipedia.org/wiki/GNU_Multiple_Precision_Arithmetic_Library
Ulrich Diez
2020-12-09 17:49:19 UTC
Permalink
Post by Jens Kallup
zur Zeit arbeite ich mit Windows 10.
Und da habe ich in einen Artikel gelesen, das Microsoft
immer noch damit beschäftigt ist, Fehler in der CPU zu
patchen.
In welcher CPU?
Post by Jens Kallup
Das hört mich also nicht gut danach aus, als wäre Win10
im Stande gute und präzise Ergebnisse zu liefern.
Wenn Fehler durch eine fehlerhafte CPU, also eine Hardware-
Komponente, bedingt sind, ist es in der Regel nicht die Schuld von
Software-Entwicklern.
Post by Jens Kallup
Mein weiteres Denken bei diesem Thread hier war, das
Computer ja nur eine bestimmte Bit-Breite haben.
Also die Breite gibt zugleich die Größte bearbeitbare
Zahl an.
Da kommt es darauf an, was man unter "Zahlen bearbeiten"
versteht. Die Wortgröße eines Rechners -- das was Du
"Bit-Breite" nennst nenne ich "Wortgröße" -- sagt etwas darüber
aus, wie groß bei einer Rechenoperation der CPU die
Zahlen sein dürfen.

Es gibt aber viele Algorithmen, um Rechnungen mit großen
Zahlen aufzusplitten in mehrere Rechenoperationen mit
Zahlen, die für die CPU klein genug sind.

Es braucht mit solchen Algorithmen halt mehrere Schritte bis
das Ergebnis da ist. Entsprechend dauert es ein bisschen länger
bis das Ergebnis da ist.

Für den Fall, dass Dich solche Algorithmen interessieren, kann
ich das Buch "Arithmetik" wärmstens empfehlen:

Das Buch "Arithmetik" ist eine von Professor Dr. Rüdiger Loos
(Tübingen) angefertigte Übersetzung des vierten Kapitels der
legendären Werkreihe "The Art of Computer Programming" von
Donald Ervin Knuth in der neuesten Fassung. Es handelt sich
um eine umfangreiche Einführung in die Computeralgebra.

Buchdetails:

Titel: Arithmetik
Autor: Donald E. Knuth
Übersetzt von: Professor Dr. Rüdiger Loos
Ausgabe: illustriert
Verlag: Springer Berlin Heidelberg, 2001
ISBN: 3540667458, 9783540667452
Länge: 538 Seiten


Das Buch ist aber recht teuer.

Außerdem ist es teilweise richtige Hardcore-Mathematik.
(Beim ersten Lesen habe ich längst nicht alles verstanden.
Musste ich aber auch nicht, um trotzdem eine Menge daraus zu
lernen.)

Deshalb habe ich es mir seinerzeit zunächst nicht gekauft, sondern,
weil ich mit Studieren schon fertig und kein Universitätsmitglied
mehr war, mir einen Gastleserausweis für die Universitätsbücherei
besorgt und es mir ausgeliehen.

Dabei handelt es sich um eine Plastikkarte mit Transponderchip.

Heute heißt das oftmals nicht mehr "Gastleserausweis", sondern
"Benutzerausweis für externe Benutzer ".
Die Ausstellung des Ausweises hat damals einmalig 10 Euro
gekostet und mit dem Ausweis kann ich immer noch Sachen
ausleihen.

Die Ausstellung eines Benutzerausweises für externe Benutzer ist
bei Universitäten in der Regel nicht an einen Studentenausweis
gebunden, aber näheres müsstest du bei der von Dir ins Auge
gefassten Bibliothek nchfragen, da es bei den Voraussetzungen,
unter denen man einen solchen Ausweis bekommt, regionale
Unterschiede gibt.

Ich weiss aber nicht, wie die Dinge in Sars-Cov-2-Zeiten laufen.

Ich weiss nur: Wenn ich etwas ausleihen will, logge ich mich
zuhause am Computer auf meinem UB-Konto ein und lasse das
Buch vormerken.

Dabei kann ich auswählen, ob mir die Sachen per Post zugeschickt
werden sollen - das kostet dann Portogebühen für den Versand - oder
ob ich sie in der UB abholen will.

Wenn ich sie in der UB abholen will werde ich per E-Mail
benachrichtigt sobald kein anderer mehr sie ausgeliehen hat und
sie für mich zur Abholung bereitliegen.

Dann geh ich hin, setze meine Maske auf und gehe schnurstracks
zu den Regalen mit den zur Ausleihe von vorgemerkten Büchern,
suche dort die Nummer, die zu meinem Ausweis gehört, nehme
den Bücherstapel heraus und verlasse das Gebäude wieder.
Da in jedem Buch Transponder-Chips eingeklebt sind, und ich
die Tür zum Ausgang der Bibliothek nur mit meinem Ausweis
öffnen kann, werden die von mir mitgenommenen Bücher beim
Verlassen des Gebäudes automatsch auf mein Ausleihkonto
bei der UB eingetragen.

Wenn man die Bücher nicht zum angegebenen Leihristende
zurückgebracht hat, werden saftige Mahngebühren verlangt.

Wenn niemand anders die Bücher braucht, kann man aber die
Leihfrist oft am Computer bis zu drei mal verlängern.

Ich habe aber den Eindruck, dass die Buchbestände immer
kleiner werden, was dem Umstand zu verdanken ist, dass
viele Studenten kostenlosen Zugang zu Büchern in
elektronischer Form bekommen.



Was für Dich, wenn Du Dich für Algorithem für Rechenoperationen
interessierst, vielleicht auch interessant sein könnte, ist das
Textsatzsystem TeX von Donald Ervin Knuth bzw das darauf
aufsetzende LaTeX von Leslie Lamport.

Dieses System wurde von Donald Ervin Knuth konzipiert, um
seine Bücher schön setzen zu können. Es ist aber auch eine
Art Programmiersprache, eine "Makrosprache", bei der es, ganz
anders als zB bei C oder C++ oder Pascal, darum geht, Algorithmen
zu implementieren, die darauf basieren, dass Zeichen durch
andere Zeichen ersetzt werden, bis das Ergebnis dasteht.

Für LaTeX gibt es tolle Bibliotheken - man nennt sie hier "Pakete" - ,
in denen zB das Rechnen mit Kommazahlen oder großen
ganzen Zahlen implementiert ist als Ablauf des Ersetzens von
Elementen von Ziffernfolgen der Operanden durch andere Ziffern
bis das Ergebnis dasteht.

Es gibt da zB ein Paket bigintcalc. Das nette daran ist, diesem
System ist es zB egal, ob es auf eien 16-bit oder einem 32-bit
oder einem 64bit-Rechner läuft:

Die Sprache, in der die Dinge implementiert sind, ist unabhängig
von der Wortgröße des Rechners die selbe.

Da alles in Form von Textdateien vorliegt, kann man, wenn man
die Sprache versteht, alles anschauen und mit der Zeit die
zugrundeliegenden Algorithmen nachvollziehen.

Sehr vieles liegt auch mit kommentiertem Quelltext vor, d.h.
in Form einer .pdf-Datei, in der der Programmtext zusammen mit
Erläuterungen "abgedruckt" ist.
Jens Kallup
2020-12-09 19:31:36 UTC
Permalink
Hallo Ulrich,
Jens Kallup schrieb: Wenn Fehler durch eine fehlerhafte CPU, also
eine Hardware- Komponente, bedingt sind, ist es in der Regel nicht
die Schuld von Software-Entwicklern.
ich will ja Windows 10 nicht schlecht reden.
Aber das beste Windows von Microsoft war und ist bestimmt noch
so in manchen Bastelstuben XP.
In jener Zeit habe ich viel mit Pascal (Delphi) und C++ Bulder
von BORLAND gefummelt.
Mein weiteres Denken bei diesem Thread hier war, das Computer ja
nur eine bestimmte Bit-Breite haben. Also die Breite gibt zugleich
die Größte bearbeitbare Zahl an.
Da kommt es darauf an, was man unter "Zahlen bearbeiten" versteht.
Die Wortgröße eines Rechners -- das was Du "Bit-Breite" nennst nenne
ich "Wortgröße" -- sagt etwas darüber aus, wie groß bei einer
Rechenoperation der CPU die Zahlen sein dürfen.
Ich habe aus Zufälligen Wegen in QUORA Liste vor einigen Monaten
einen Interessanten Artikel gelesen, der sich mit dem Graphen und
der Darstellung diesem in höheren Weiten des Zahlenbereiches, von
der Tangens-Funktion besprochen wurde.

Als Graph konnte man sehen, das der Abstieg der Funktion irgendwo
und irgendwann zu höheren Werten (im Wechsel) betrachtet werden
kann/konnte.

Und weil dann sowas hier:
10e^(256)

angezeigt wurde, konnte man nicht genau sehen, wann und in welchem
Intervall der Graph die Werte wechselte.
Also damit meine ich, man bekommt nie die Güte von Größen Zahlen
auf Kleinstrechner.

Klar, geht ja auch nicht.
Da wäre die Batterie schnell all :-)

Nun habe ich aber gedacht, man könnte doch hergehen und nicht mit
Zahlen, sondern mit Zeichenketten rechnen (Byte-/Wort-Größe).
Gedacht getan.
Das Ergebnis kannst Du auf meinen github.com entnehmen.
Allerdings habe ich nur Grob die Addition, Subtraktion, sowie die
Multiplikation einigermaßen aufstellen können.

Wie vielleicht dann sehen kannst, ist der eigentliche Code recht
klein, und sich an vielen Stellen ähnelt.
Außer der noch ausstehenden Division.
Es gibt aber viele Algorithmen, um Rechnungen mit großen Zahlen
aufzusplitten in mehrere Rechenoperationen mit Zahlen, die für die
CPU klein genug sind.
Es braucht mit solchen Algorithmen halt mehrere Schritte bis das
Ergebnis da ist. Entsprechend dauert es ein bisschen länger bis das
Ergebnis da ist.
Das ist richtig.
Für den Fall, dass Dich solche Algorithmen interessieren, kann ich
Das Buch "Arithmetik" ist eine von Professor Dr. Rüdiger Loos
(Tübingen) angefertigte Übersetzung des vierten Kapitels der
legendären Werkreihe "The Art of Computer Programming" von Donald
Ervin Knuth in der neuesten Fassung. Es handelt sich um eine
umfangreiche Einführung in die Computeralgebra.
Titel: Arithmetik Autor: Donald E. Knuth Übersetzt von: Professor Dr.
Rüdiger Loos Ausgabe: illustriert Verlag: Springer Berlin Heidelberg,
2001 ISBN: 3540667458, 9783540667452 Länge: 538 Seiten
Danke, werde ich mal mal Versuchen nähere Informationen zum
Erwerb zu gelangen.
Das Buch ist aber recht teuer.
Okay.
Außerdem ist es teilweise richtige Hardcore-Mathematik. (Beim ersten
Lesen habe ich längst nicht alles verstanden. Musste ich aber auch
nicht, um trotzdem eine Menge daraus zu lernen.)
Nun, bei mir ist das so:
ich habe ja ein kleines Handycap und muss vieles erstmal nachschlagen
zusammen fassen und berechnen.
Das macht mir auch sehr viel Freude, werde aber immer von irgendeinen
abgelängt (Entweder durch das Personl oder von Anderen, mir gut
gesinnten Leuten, die in mein Zimmer kommen, paar Minuten bleiben und
ich dann wieder den Roten-Faden verliere.)
Gut, Freundschaften muss man pflegen, aber irgendwann will man doch
seine Ruhe haben für andere Dinge, wie zum Beispiel hier, die
Beschäftigung mit Zahlen bzw. eines Hobby.
Ich weiss aber nicht, wie die Dinge in Sars-Cov-2-Zeiten laufen.
Ich weiss nur: Wenn ich etwas ausleihen will, logge ich mich zuhause
am Computer auf meinem UB-Konto ein und lasse das Buch vormerken.
Dabei kann ich auswählen, ob mir die Sachen per Post zugeschickt
werden sollen - das kostet dann Portogebühen für den Versand - oder
ob ich sie in der UB abholen will.
ja, so ähnlich ist das auch bei mir so.
Allerdings lebe ich auf einen Dorf weitab von einer Stadt,
so dass ich immer abwägen muss - fährst du - oder nicht.
Dann kommt ja noch hinzu, dass die Bibliothek (wir haben
auch eine Universität seit kurzem) etwas mittelalterlich ist
und ich meist mit Anliegen komme, die nicht verzeichnet sind.

Will ja dem Personal keine vorhalte machen, aber die machen
auch nur ihren Dienst,
so dass ich dann mein Anliegen Präzise angeben muss, um welches
Buch, von wem, ...
Bei teuren Büchern muss ich auch noch etwas Porto zahlen.
Kann aber dafür bei einer Partnerbiliothek das Buch bestellen.
Gut nicht ich, das macht dann die ansässige Bibliothek.
Was für Dich, wenn Du Dich für Algorithem für Rechenoperationen
interessierst, vielleicht auch interessant sein könnte, ist das
Textsatzsystem TeX von Donald Ervin Knuth bzw das darauf aufsetzende
LaTeX von Leslie Lamport.
ja, das kenne ich auch noch von meinen Linux-Zeiten.
Zum Glück gibt es das auch für Windows.
Aber mit dem installieren von OpenOffice, als Beispiel, hat man
die Möglichkeit per Mausi-Klicki-Klacki Formel, Zeichnungen, Text
und Berechnungen zu Verknüpfen.
So wie man das von den Produkten von Microsoft auch kennt.
Der Nachteil an Windows: sind die Ressourcen.
Der Vorteil an Linux: man hat bereits das Buch vor sich liegen.
Dieses System wurde von Donald Ervin Knuth konzipiert, um seine
Bücher schön setzen zu können. Es ist aber auch eine Art
Programmiersprache, eine "Makrosprache", bei der es, ganz anders als
zB bei C oder C++ oder Pascal, darum geht, Algorithmen zu
implementieren, die darauf basieren, dass Zeichen durch andere
Zeichen ersetzt werden, bis das Ergebnis dasteht.
Ja, Knuth war echt gut als Lehrer.

Was ich mir noch irgendwie angewöhnen muss, sind die gängigen
Symbole - manchmal erden einige für andere Sachen eingeführt.
Zum Beispiel weiß ich im Moment nicht, ob bei der Formel auf:

https://de.wikipedia.org/wiki/Schnelle_Fourier-Transformation

hier im Abschnutt:
"Algorithmus von Cooley und Tukey"

in der Formel stehende "e" die Euler-Zahl gemeint ist, oder
etwas anderes.

Zur Zeit bin ich Autodidakt und bringe mir vieles selber bei
(okay, ich lese es ab :-) mit Hilfe von dieser Gruppe hier
oder wikipedia, etc..

Gruß, Jens
Jens Kallup
2020-12-10 18:55:33 UTC
Permalink
Hallo,

geg.
3245 : 237 = ?

Lsg. A:

30| : 7 = 4|285714 | Probe:
-28| | 7 * 4 = 28 -> 28 < 30
---|--------------
2|0
- 1|4 | 7 * 2 = 14 -> 14 < 20 <--+
---|-------------- |
0|60 |
- 0|56 | 7 * 8 = 56 -> 56 < 60 |
---|-------------- |
0|040 |
- 0|035 | 7 * 5 = 35 -> 35 < 40 |
---|-------------- |
0|0050 |
- 0|0049 | 7 * 7 = 49 -> 49 < 50 |
---|-------------- |
0|00010 |
- 0|00007 | 7 * 1 = 7 -> 7 < 10 |
---|-------------- |
0|000030 |
- 0|000028 | 7 * 4 = 28 -> 28 < 30 |
---|-------------- |
0|0000020 <-- Periode ---------------+

1. 30 : 7 = 4|285714
2. 30 : 3 = + 10|00
3. 30 : 2 = + 15|00
------------------------
= 29|285714 Falsch !!

ODER mit Rest:

30 : 7 = ? 13
.
/ \
15 : 3 Rest 1 | | 30 : (7:2) = 3 R(1*3,5)
7 : 1 Rest 1 | | 7 : (7:7) = 1

28 : 2 = 14 | 2 * 14 = 28 Rest 2 -> (14:2)
14 : 2 = 7 --> 13,7

scheint gerundet, aber wahr zu sein.

hier habe ich nur mit der erste Ziffer, die 3 von
3245 dividiert durch 237 gerechnet.

wieso kommt der Computer so verdammt nah an das
Ergebnis, also ich meine, mein gekrakkel ... ?

Jens
Jens Kallup
2020-12-11 12:16:56 UTC
Permalink
So, ich habe das nochmal nachgerechnet, und komme
nun zu folgenden Ergebnis:

3245 : 237 = ?

Für die Berechnung habe ich die links stehende
Dividenden in je zehner-Blöcke aufgeteilt und mit
dem rechts stehenden Divisior je einzeln dividiert:

Ich habe versucht, das ganze in Stücke zu legen und
zu berechnen,
hier mit Rest < 0

kann ja auch irgendwo ein Fehler sein?

Zusammenfassung:

A B C
-----------+----------+---------
1. 30 : 7 | 30 : 3 | 30 : 2
2. 20 : 7 | 20 : 3 | 20 : 2
3. 40 : 7 | 40 : 3 | 40 : 2
4. 50 : 7 | 50 : 3 | 50 : 2


A. 30 : 7 = 0 +---+
15 : 3 = Rest: 1 (3:2 = 1,5) | 3 |
7 : 1 = Rest: 1 (1:2 = 0,5) | 1 |
+---+->----+
20 : 7 = 0 +---+ |
14 : 3 = Rest: 1 (3:2 = 1,5) | 3 | |
7 : 1 = Rest: 1 (1:2 = 0,5) | 1 | |
+---+->----+
40 : 7 = 0 +---+ |
20 : 3 = Rest: 1 (3:2 = 1,5) | 3 | |
10 : 1 = Rest: 1 (1:2 = 0,5) | 1 | |
+---+->----+
50 : 7 = 0 +---+ |
25 : 3 = Rest: 1 (3:2 = 1,5) | 3 | |
12 : 1 = Rest: 1 (1:2 = 0,5) | 1 | |
+---+->----+
|
0013 <---------------------------------+
= 13,

In den nächsten 2 Blocks, den Divisor addieren:

B. 30 : 3 = 1 Rest: 0 (3:2 = 1,5)
15 : 1 = Rest: 1 (1:2 = 0,5)
==> 4 + 1

20 : 3 = 0
10 : 3 = Rest: 1 (3:2 = 1,5)
5 : 1 = Rest: 1 (1:2 = 0,5)
==> 7

40 : 3 = 0
20 : 3 = Rest: 1 (3:2 = 1,5)
10 : 1 = Rest: 1 (1:2 = 0,5)
==> 7

50 : 3 = 0
50 : 3 = Rest: 1 (3:2 = 1,5)
25 : 1 = Rest: 1 (1:2 = 0,5)
==> 7
1. Zwischen-Summe = 3*7 = 21+5 = 26

C. 30 : 2 = 0
15 : 1 = Rest: 1 (1:2 = 0,5)
==> 3

20 : 2 = 0
10 : 1 = Rest: 1 (1:2 = 0,5)
==> 3

40 : 2 = 0
20 : 1 = Rest: 1 (1:2 = 0,5)
==> 3

50 : 2 = 0
25 : 1 = Rest: 1 (1:2 = 0,5)
==> 3
2. Zwischen-Summe: 3*4 = 12

Summen 1 und 2: = 26
12
plus: 31 von A
--------------------------------
= 69

Akkumalatorisch zusammen alles würfeln:
__
13,69

stimmt schon fast genau.
Das was Ihr hier seht, habe ich aus einer
Elektronischen Schaltung, aus einen Buch von
1971.
Kann sein, dass das auch nicht stimmt.

Gruß, Jens

Jens Kallup
2020-12-06 13:58:28 UTC
Permalink
Post by Jens Kallup
2300 : 7 =
A. Block:
1. Hinweis:
Dividend und Divisor auf gleiche Länge zurren.
Also:
2300 : 7000 = ?

2. Hinweis:
überschüssige Nullen streichen.
Also:
230 : 70 = ?

3. Hinweis:
bei der 70 denken wir uns eine Null weg:
Also
7 oder 7,0 (7,0 kann man sich sparen, da Ressource...)

1. Berechnen:
man schaut, wie na eine Zahl, die durch 7 teilbar ist
an einen Block liegt - hier wäre der erste Block 300:

30 : 7 = ? -> geht nicht, dann schauen wir:
28 : 7 = 4 -> geht, Rest bis 30 := 2

dann lösen/verkleinern wir den Rest 2:
2 : 7 = 14 -> geht, Rest 6
2 : 7 -> ist < 0, also:
20 : 7 = 14 -> geht = 2, Rest 6 (14 + 6 = 20)

Die Rest-Werte sind eigentlich nur die Zahlen nach dem
Komma.
Also wäre unsere Rechnung oben 2,6 ~= 3.

Jetzt aufpassen:
Wir spiegeln, indem wir 14 zu 41 machen und die 3 dazu
macht:
413


B. Block, siehe Hinweise A. Block
2000 : 7 = ? -> geht nicht
1400 : 7 = 200 -> geht Rest 0 | 400 + 200 = 600
600 : 7 = ? -> geht nicht, nächste:
560 : 7 = 80 -> geht Rest 40 | 600 - 500 = 100
| 60 + 40 = 100
40 : 7 = ? -> geht nicht
35 : 7 = 5 -> geht Rest 5
50 : 7 = ? -> geht nicht
42 : 7 = 7 -> geht Rest 8 | 8 - 1 = 7

--------------------------
=           28|5
=           28|57|413

die germerkte 3 an erste Stelle mit gesetzten Komma:
= 328,57413

Jens
Stephan Herrmann
2020-12-06 18:48:10 UTC
Permalink
Post by Jens Kallup
Post by Jens Kallup
2300 : 7 =
[...]
Post by Jens Kallup
Wir spiegeln, indem wir 14 zu 41 machen und die 3 dazu
413
Die Spiegelung 14 zu 41 führt aber dann doch zum falschen Ergebnis
[...]
Post by Jens Kallup
= 328,57413
Eine allgemeine Beschreibung wäre hilfreich fürs Verständnis.
Was nutzt Du denn als Grundlage für Deine Programmierung?
--
Stephan
Jens Kallup
2020-12-07 07:08:12 UTC
Permalink
Post by Stephan Herrmann
Eine allgemeine Beschreibung wäre hilfreich fürs Verständnis.
Was nutzt Du denn als Grundlage für Deine Programmierung?
Guten Montag Morgen Stephan,

Als Grundlage verwende ich Pascal - als IDE Delphi 7.
Weil ich der Meinung bin, dass unter Windows das gut alte Delphi 7
vom Jahr 2002 von BORLAND im 32-Bit Modus immer noch bessere Dienste
leistet als das bigomase Monster Java oder Visual-Studio C++.

Ich hätte das auch in Visual-C/C++ von 1998 nehmen können, das ist
auch noch am schnellsten unter Windows.

Aber was Rede ich hier, Ihr wisst ja selbst ...
Nur, ich bin halt gezwungen Windows zu Verwenden.

Hier meine GIT-codes, älteren Datums:

https://github.com/paule32/newsgroup_strom1/blob/main/bigMath.pas

Gruß, Jens
Christian Gollwitzer
2020-12-07 07:31:45 UTC
Permalink
Post by Jens Kallup
Post by Stephan Herrmann
Eine allgemeine Beschreibung wäre hilfreich fürs Verständnis.
Was nutzt Du denn als Grundlage für Deine Programmierung?
Guten Montag Morgen Stephan,
Als Grundlage verwende ich Pascal - als IDE Delphi 7.
Kann man ja trotzdem mal gucken, was andere so haben; google nach
"arbitrary precision library pascal" findet z.B.

https://github.com/benibela/bigdecimalmath

http://www.benibela.de/sources_en.html#bigdecimalmath

Christian
Jens Kallup
2020-12-07 12:27:03 UTC
Permalink
Am 07.12.2020 um 08:31 schrieb Christian Gollwitzer:

Bist Du Entwickler bei Ben?
Gute Arbeit.
Ich habe mal die Library überpfögen.
Wie ich feststelle hat der Entwickler sich mit
Dezimalzahlen beschränkt auf zwei Typen:

1. Integer (32-Bit -> 2^(32-1) ), sowie
2. Int64 (was dem 1. Integer auf 2^(64-1) erweitert)

Das würde also bedeuten, dass die Lib ein klein wenig
limitiert ist.
Ich mein, 2^(64-1) sind schon ein großer Batzen Zahlen
bzw. Daten.

Wer im Astro-Bereich als Hobbyforscher unterwegs ist,
dem würde das sicherlich reichen.
Aber um Größere Anwendungen im Enterprise Bereich - also
BigData mit kleinst-Rechnern betreiben will, kommt nicht
sehr weit.

Hab ja in einen anderen Thread geschrieben, das Mikro-
Computer, darunter zählen auch die handelsüblichen
privat-Computers vom Baumarkt, falsche Ergebnisse liefern.
Da kommt ja auch noch der Faktor Geschwindigkeit dazu:
je schneller, desto mehr Wärme, umso fehleranfällig die
CPU - wegen Überspringen von Bahnen - kennt Ihr ja auch.

Bei Windows kommt ja noch hinzu, das der Kern eine GUI
ist, und nicht wie bei *nix Systemen; meist noch als
reine TextConsole (TUI) gearbeitet wird - wie schön war ja
die Zeit mit Turbo Pascal und Turbo Vison :-) - kleine Rand
Bemerkung :-)

wo war ich stehen geblieben, achso, ja Win-GUI:
dort werden viele hunderte einzelne Subroutinen ausgeführt
wie zum Beispiel für das Darstellen eines einzelnen
Buchstabens:
- in Win. muss da erstmal ein Objekt initializiert werden,
dann folgt ein Font laden,
dann die Größe und Lage Berechne - kennt Ihr ja auch ..
Das sind so die kleinen Dinge, die das Win so langsam
machen.

Es kommt halt darauf an, was man mit seinen Computers machen
will.
Zweifelsohne kann ein textbasierter Server die tollsten
Berechnungen machen, und diese an einen kleineren Computers
abgeben.
Das Darstellen dieser Daten ist dann ja dem Benutzer über-
lassen, und erfordert wieder anderes Wissen.

Um mich jetzt nicht zu Brüsten:
Aber die Dinge, die ich bereits voran getrieben habe, scheinen
mir am besten; ich habe zwar jetzt nicht den tollsten Coding-
Style, denke aber frei von Lizenzen zu sein und selbst gemachtes
schmeckt am besten :-)

Gut, muss auch ich zugeben, das dies nur Plagiate sind, weil:
ich habe auch nur programmieren gelernt, indem ich anderen
Code abgeschrieben habe, um zu testen was geht, was nicht.

Macht ja jedes Schulkind:
Es lernt, indem man abschreibt.
Klingt jetzt erst mal doof, aber ich finde, da ist was wares
dran.

Ich sitze halt den ganzen Tag in meinen Stübchen und Versuche
irgendwelche Ideen umzusetzen.
Ich lasse mich immer nur zu gerne von anderen Dingen ablenken.
Viele sagen, das ist immer zu spezifisch was ich mache, und
ich solle die Zeit doch mit anderen Dingen verbringen.
Aber das bin halt ich - so wie Ihr ihn vielleicht noch kennt :-)

Okay. Nun, Schluss mit dem gesabbel.

Gruß, Jens
Juergen Ilse
2020-12-07 16:39:44 UTC
Permalink
Hallo,
Post by Jens Kallup
Hab ja in einen anderen Thread geschrieben, das Mikro-
Computer, darunter zählen auch die handelsüblichen
privat-Computers vom Baumarkt, falsche Ergebnisse liefern.
Die ARM-basierten Kleinstrechner (z.B. Rasberry, Odroid, Rock64, ...)
haben ueblicherweise einen "Selbstschutz" implementiert, so dass die CPU
automatisch heruntergetaktet wird, wenn sie zu warm zu werden droht.
In dem Punkt sind die kleinen Dingen der ueblichen PC-Technil tatsaechlich
ueberegen ...
Post by Jens Kallup
je schneller, desto mehr Wärme, umso fehleranfällig die
CPU - wegen Überspringen von Bahnen - kennt Ihr ja auch.
Ist das wirklich ein Problem? Btw: Warum muss es bei dir windows sein?
Post by Jens Kallup
Bei Windows kommt ja noch hinzu, das der Kern eine GUI
ist, und nicht wie bei *nix Systemen; meist noch als
reine TextConsole (TUI) gearbeitet wird
Das, was du hier ansorichst, ist das "User-Interface", nicht der Kern.
Post by Jens Kallup
- wie schön war ja
die Zeit mit Turbo Pascal und Turbo Vison :-) - kleine Rand
Bemerkung :-)
Es gibt "cmd.exe" (und wenn das nicht ausreicht: powershell) immer noch,
und das wird auch nicht so schnell verschwinden.
Post by Jens Kallup
dort werden viele hunderte einzelne Subroutinen ausgeführt
wie zum Beispiel für das Darstellen eines einzelnen
- in Win. muss da erstmal ein Objekt initializiert werden,
dann folgt ein Font laden,
dann die Größe und Lage Berechne - kennt Ihr ja auch ..
Das sind so die kleinen Dinge, die das Win so langsam
machen.
Solange du nicht wirklich exzessiv 3D-Grafik machen willst, ist daS bei heute
ueblicher Hardware alles ziemlich irrelevant.Es ist fuer die alltaegliche
Nutzung schnell genug. Und das erste Limit, an das man damit ueblicherweise
stoesst, ist das Speicherlimit (und dann bremst das "auslagern von Speicher").
Post by Jens Kallup
Es kommt halt darauf an, was man mit seinen Computers machen
will.
Ich frage mich, was du damit eigentlich zu machen gedenkst ...
Post by Jens Kallup
Zweifelsohne kann ein textbasierter Server die tollsten
Berechnungen machen, und diese an einen kleineren Computers
abgeben.
Das Darstellen dieser Daten ist dann ja dem Benutzer über-
lassen, und erfordert wieder anderes Wissen.
Was genau fehlt dir denn bei den "ueblichen Tools auf Linux" oder den
Windows-Portierungen der selben Tools? Dass "bc" (ohne GUI, nur in einem
Textfenster ausgefuehrt) fuer die Berechnungen ausreichen wuerde, hatte
ich ja schon angedeutet. Zur Visualisierung von Daten kann man dann viel-
leicht noch gnuplot oder aehnliches verwenden (auch davon sollte es eine
Windowsversion geben).

Und wenn man sich fuer wenig Geld mal Linux ansehen moechte: Ich hatte
fuer meinen Rasberry Pi 4b mit 8 GB Ram, SD-Karte, Display-Adapter
(mikro-HDMI auf HDMI) und Funk-Tastatur mit Touchpad sowie Netzteil und
das ArgonOne Gehaeuse IIRC weniger als 140,- EURO bezahlt. Die Software
(bei mir RaspiOS in der 64-Bit Version) gab es kostenlos. Da das auf einem
separaten Rechner laeuft, besteht auch keine Gefahr, sich damit seinen
Windows-Rechner zu zerschiessen.
Post by Jens Kallup
Aber die Dinge, die ich bereits voran getrieben habe, scheinen
mir am besten; ich habe zwar jetzt nicht den tollsten Coding-
Style, denke aber frei von Lizenzen zu sein und selbst gemachtes
schmeckt am besten :-)
Die Lizenz fuer RaspiOS ist zu grossen Teilen GPL oder LGPL, so auch bei
dem "bc" 8die Gnu Version) die im System enthalten ist. "bc" ist eigentlich
eine eigene Programmiersprache (aehnlich einfach wie Basic), die man inter-
aktiv benutzen kann. Mit der "math library" stehen auch Funktionen wie
Sinus, Cosinus, Arcustangens, (natuerlicher) Logarithmus, Exponentialfunktion
und Bessel Funktion zur Verfuegung.
Post by Jens Kallup
Ich sitze halt den ganzen Tag in meinen Stübchen und Versuche
irgendwelche Ideen umzusetzen.
Der Wunsch etwas selbst zu schreiben, auch wenn hunderte oder tausende von
Personen vor dir schon mal das selbe geschrieben haben, einfach aus Jux und
Dollerei, waere natuerlich ein Argument, warum du es selbst schreiben willst,
aber eine technische Notwendigkeit opder einen wesentlichen Vorteil deines
eigenen Codes gegenueber etabluerten Loesungen sehe ich nicht ...

Uebrigens bei Windows 10 ist mittlerweile auch "WSL" verfuegbar, damit kannst
du dir eine Linux-Distribution ganz einfach aus dem AppStore installieren,
die dann unter Windows laeuft, da brauchst du dann keinen Raspi und kannst
trotzdem Windows und 'Linux parallel benutzen ...

Tschuess,
Juergen Ilse (***@usenet-verwaltung.de)
Jens Kallup
2020-12-07 17:49:50 UTC
Permalink
Hallo Juergen,

ich könnte auch hergehen und den bestehenden Code in
Assembler implementieren.
Aber bei mir ist das so:
Ich lebe und wohne in einen Heim für Menschen mit einen
Händicap.

Mein monatlicher Lohn erstreckt sich auf 80,- Euronen.
Zum Glück habe ich mit 41 Jahren noch einen Vater, der
für mich die Telefon- und Internetrechnung bezahlt.

Ich habe in manchen Gebieten Interesse, aber es fehlt
mir auch an "schnellen" Verständnis.

Daher sitze ich hier und habe meist spezifische Fragen,
die eigentlich schon gelöst worden sind.

Da mein Hobby aber dem Computer gilt, verwende ich meine
Zeit in der Programmentwicklung (keine Spiele), auf
Technik, die schon über 15 Jahre alt ist.

Daher bitte ich um Verständnis, auch gegen meine Unkenntnis
für laufende Entwicklungen.

Ich will nicht Klagen; ich habe ein warmes Zimmer, bekomme
zu Essen und Trinken...

Mein Motto ist halt; Schau kein TV, lies lieber ein Buch
und mach was kreatives.
Und das kreative ist halt Software-Entwicklung.

Ihr fragt Euch sicherlich immer wieder, warum ich das mache
und welches Ziel ich verfolge...
Da muss ich wie oben beschrieben einfach sagen/schreiben:
Die anderen sitzen vorm TV, im Auto, an der Play Station
und vergammeln die Zeit - ich hingegen versuche etwas zu
schaffen, wo ein (ich sag jetzt mal naiv) Gegenwert steckt.

Vielmals kann man meine Codes nicht nachvollziehen.
Aber ich bemühe mich im Rahmen dessen, so kurz wie möglich
zu Halten.
Dabei treffe ich immer wieder an Leute, die sagen, auf
Speicher brauchst du nicht mehr achten, kaufst dir etliche
Terrabyte größere Festplatte, und gut ist.

Ich für meinen Teil komme noch aus der MS-DOS Welt, unter
dessen Haube schon das erste Linux lief.

Und ich achte/respektiere so große Größen wie Computer
Pioniere und andere schlaue Leute (Mathematiker), die sich
in der damaligen Zeit wirklich viel Kopf zerbrechen machen
mussten, wie das jeweilige Problem gelöst werden kann,

Für schade finde ich es deshalb, dass so das Wissen und die
Tatsache, das einiges beschränkt ist, aber immer noch zur
Lösung kommt.

Ich muss Euch Recht geben, das so vieles Zeitverschwendung
ist. Aber ich bin der Meinung, das eventuell der Eine oder
Andere interessierte auch in meiner Situation steckt, bei
gegebener Zeit nützlich sein kann.

Was Windows anbelangt:
es wird viel mehr Zeit vergehen, wenn man in der Console ist
und den einfachen Befehl "DIR" eingibt um ein "langes"
Verzeichnis auszugeben.
Dort wird Pixel für Puxel verschoben, während unter DOS der
Bildschirm-Speicher mit der Adresse 0xb8000 um einiges
schneller ist, diesen zu beschreiben, um Text auszugeben.

Im Prinzip sind das ja auch nur kleine Pixels, die zu einen
statischen Block zusammen gefasst sind.

Aber ich will nicht jammern.
Der Eine hat die Meinung, der Andere die...

Gruß, Jens
Juergen Ilse
2020-12-08 04:20:19 UTC
Permalink
Hallo,
Post by Jens Kallup
Ich für meinen Teil komme noch aus der MS-DOS Welt, unter
dessen Haube schon das erste Linux lief.
Unter der Haube von MSDOS lief noch nie ein Linux. Linux ist ein Multi-
tasking und Multiuser Betriebssystem, MSDOS ist weder Multitasking faehig
noch beherrscht es eine Multiuser faehige Rechte-Verwaltung.
Post by Jens Kallup
es wird viel mehr Zeit vergehen, wenn man in der Console ist
und den einfachen Befehl "DIR" eingibt um ein "langes"
Verzeichnis auszugeben.
Dort wird Pixel für Puxel verschoben, während unter DOS der
Bildschirm-Speicher mit der Adresse 0xb8000 um einiges
schneller ist, diesen zu beschreiben, um Text auszugeben.
Auch unter DOS war zwischen der Benutzung der BIOS-Funktionen zur Text-
ausgabe auf dem Bildschirm und dem direkten schreiben in den Videospeicher
zwar ein messbarer, aber kein subjektiv spuerbarer Unterschied. Das direkte
schreiben in den Videospeicher war jedoch unportabel (schon die Nutzung
einer Monochrom- oder Herkulesgrafik statt der CGA Karte sorgte dafuer, i
dass der Beginn des Videospeicher nicht mehr an Segmentadresse b800 sondern
an b000 lag. Die Bios-Routinen zur Bildschirmausgabe funktionierten aber mit
jeder dieser Hardware-Varianten, waren als erheblich portabler.
Man sollte i.a. darauf verzichten, sich Mikrooptimierungen mit Unportabilitaet
zu erkaufen, denn frueher oder spaeter wird sich so etwas vermutlich raechen.
Auch 15 Jahre alte rechner sind schnell genug, um nicht mehr direkt im Video-
speicher herumfummeln zu muessen.

Tschuess,
Juergen Ilse (***@usenet-verwaltung.de)
Martin Vaeth
2020-12-07 21:44:23 UTC
Permalink
Post by Juergen Ilse
Der Wunsch etwas selbst zu schreiben, auch wenn hunderte oder tausende von
Personen vor dir schon mal das selbe geschrieben haben, einfach aus Jux und
Dollerei, waere natuerlich ein Argument, warum du es selbst schreiben willst,
aber eine technische Notwendigkeit opder einen wesentlichen Vorteil deines
eigenen Codes gegenueber etabluerten Loesungen sehe ich nicht ...
Da bin ich nicht so sicher. Ich habe gerade mal GMP angeschaut:

https://gmplib.org/manual/Multiplication-Algorithms

Es könnte durchaus sein, dass eine geschickte Implementierung der
Schönhage–Strassen Multiplikation

https://de.wikipedia.org/wiki/Sch%C3%B6nhage-Strassen-Algorithmus

oder neuere Versionen davon doch schneller sind. Asymptotisch
zumindest ist er es (auch wenn in Wikipedia steht, dass das bei
realistischen Größen wohl noch nicht zum Tragen kommt).
Und wenn man erst mal die schnelle Multiplikation hat, kommt man mit
Newton-Raphson auch zu einer schnellen Division:

https://de.wikipedia.org/wiki/Newton-Raphson-Division

Zumindest beim Überfliegen scheinen mir die Algorithmen von GMP
zur Division

https://gmplib.org/manual/Division-Algorithms

asymptotisch alle schlechter zu sein. Aber ich habe nicht genau
nachgerechnet, sondern wirklich nur grob überflogen und abgeschätzt.

Wenn man viel Zeit zu verschenken hat, wäre es sicher spannend,
zu probieren, ob sich GMP nicht doch schlagen lässt...
Carlo XYZ
2020-12-07 22:04:42 UTC
Permalink
Post by Martin Vaeth
Post by Juergen Ilse
Der Wunsch etwas selbst zu schreiben, auch wenn hunderte oder tausende von
Personen vor dir schon mal das selbe geschrieben haben, einfach aus Jux und
Dollerei, waere natuerlich ein Argument, warum du es selbst schreiben willst,
aber eine technische Notwendigkeit opder einen wesentlichen Vorteil deines
eigenen Codes gegenueber etabluerten Loesungen sehe ich nicht ...
https://gmplib.org/manual/Multiplication-Algorithms
Es könnte durchaus sein, dass eine geschickte Implementierung der
Schönhage–Strassen Multiplikation
https://de.wikipedia.org/wiki/Sch%C3%B6nhage-Strassen-Algorithmus
oder neuere Versionen davon doch schneller sind. Asymptotisch
zumindest ist er es (auch wenn in Wikipedia steht, dass das bei
realistischen Größen wohl noch nicht zum Tragen kommt).
Gibt es den dort nicht schon - unter dem Namen "FFT"?

Neuere Versionen könne natürlich immer noch schneller sein.
Martin Vaeth
2020-12-08 20:41:11 UTC
Permalink
Post by Carlo XYZ
Post by Martin Vaeth
https://gmplib.org/manual/Multiplication-Algorithms
Es könnte durchaus sein, dass eine geschickte Implementierung der
Schönhage–Strassen Multiplikation
Gibt es den dort nicht schon - unter dem Namen "FFT"?
Du hast richtig.
Das scheine ich übersehen zu haben, wohl weil ich die Seite in meinem
geistigen Scan-Modus nach O(...irgendwas mit log...) durchsucht habe.
Jens Kallup
2020-12-07 22:07:19 UTC
Permalink
Post by Martin Vaeth
Wenn man viel Zeit zu verschenken hat, wäre es sicher spannend,
zu probieren, ob sich GMP nicht doch schlagen lässt...
wir bleiben dran... :-)

habt Ihr mal meinen Code auf git betrachtet - also
diese bigmath.pas ?
Vielleicht kann man das ja nochmals kürzen; denke
aber, das ich das Optimum habe.
Vor allem wäre eine EXE Datei um weitaus kleiner als
große GMP-like libs einzubinden - sei es nun als RAW
Code oder als gesamte DLL in den Speicher, bei dem
dann viele Bytes einfach nur daher schlummern.

Gruß, Jens
Christian Gollwitzer
2020-12-08 06:31:39 UTC
Permalink
Post by Jens Kallup
Bist Du Entwickler bei Ben?
Gute Arbeit.
Ich hab damit nichts zu tun. Wie gesagt, habe ich einfach mal nach
"pascal arbitrary precision library" gegoogelt. Liefert auch noch andere
Treffer, z.B. nur für Integer das hier
https://github.com/Xor-el/IntXLib4Pascal oder eben Bindings an die GMP.
Post by Jens Kallup
Ich habe mal die Library überpfögen.
Wie ich feststelle hat der Entwickler sich mit
1. Integer (32-Bit -> 2^(32-1) ), sowie
2. Int64   (was dem 1. Integer auf 2^(64-1) erweitert)
Das würde also bedeuten, dass die Lib ein klein wenig
limitiert ist.
Ich mein, 2^(64-1) sind schon ein großer Batzen Zahlen
bzw. Daten.
Ich bin mir nicht sicher, ob ich das richtig verstanden habe. Willst Du
damit sagen, dass die Library nur max. 64bit-Zahlen verarbeiten kann?
Das ist definitiv falsch, steht ja auch schon im Readme:

"Supports at least numbers between 10^(-19327352814) to 10^(19327352814)
with up to 4831838208 decimal digit precision"

d.h. die Länge einer Zahl im Dezimalsystem ist begrenzt auf 32 bit (d.h.
2GB), das scheint mir dann doch keine wirkliche Limitation zu sein.

Christian
Jens Kallup
2020-12-07 07:17:45 UTC
Permalink
argg, Beispiel-Code vergessen:

---%<--- schnipp -----
var
MathSolver : TBigMathSolver;

MathSolver := TBigMathSolver.Create;

MathSolver.Push( '840' );
MathSolver.Push( '320' );
MathSolver.Push( Addition );

Edit1.Text := MathSolver.calc;
--->%--- scnapp -----

Jens
Juergen Ilse
2020-12-07 03:47:33 UTC
Permalink
Hallo,
Post by Jens Kallup
Beim Topic/Betreff habe ich ja schon nach "vereinfacht"
ein Fragezeichen gestellt.
Natürlich hast Du recht, wenn man das ganze mit Überschlags-
rechnen hinbekommt.
Ich war nur erstaunt darüber, dass, wenn man dieses Verfahren
anwendet, zu fast dem selben Ergebnis kommt.
Nun, ich bin dabei, in Pascal (Programmiersprache) einen Mathe-
solver zu basteln, bei dem man zwei beliebige Zahlen angibt und
diese versucht zu dividieren.
Dabei handelt es sich um zwei Zeichenketten, die ich sage jetzt
mal 2048 Zeichen (Ziffern) enthalten können, aber zu einen
richtigen Ergebnis führen.
Normale ALDI Taschenrechner können zum Beispiel nur 9 ibs 10
Zeichen (Ziffern) verarbeiten - gegenüber meinen Solver 2048.
Es gibt bereits genuegend "arbitrary precision calculation" librarys,
warum nicht einfach eine davon nutzen? Oder wenn du nur das Tool
benoetigen solltest: "bc" (in der unixwelt auf fat jedem system
verfuegbar) gibt es sicherlich auch fuer Windows ...

scale=4096
3224/247
13.05263157894736842105263157894736842105263157894736842105263157894\
73684210526315789473684210526315789473684210526315789473684210526315\
78947368421052631578947368421052631578947368421052631578947368421052\
63157894736842105263157894736842105263157894736842105263157894736842\
10526315789473684210526315789473684210526315789473684210526315789473\
68421052631578947368421052631578947368421052631578947368421052631578\
94736842105263157894736842105263157894736842105263157894736842105263\
15789473684210526315789473684210526315789473684210526315789473684210\
52631578947368421052631578947368421052631578947368421052631578947368\
42105263157894736842105263157894736842105263157894736842105263157894\
73684210526315789473684210526315789473684210526315789473684210526315\
78947368421052631578947368421052631578947368421052631578947368421052\
63157894736842105263157894736842105263157894736842105263157894736842\
10526315789473684210526315789473684210526315789473684210526315789473\
68421052631578947368421052631578947368421052631578947368421052631578\
94736842105263157894736842105263157894736842105263157894736842105263\
15789473684210526315789473684210526315789473684210526315789473684210\
52631578947368421052631578947368421052631578947368421052631578947368\
42105263157894736842105263157894736842105263157894736842105263157894\
73684210526315789473684210526315789473684210526315789473684210526315\
78947368421052631578947368421052631578947368421052631578947368421052\
63157894736842105263157894736842105263157894736842105263157894736842\
10526315789473684210526315789473684210526315789473684210526315789473\
68421052631578947368421052631578947368421052631578947368421052631578\
94736842105263157894736842105263157894736842105263157894736842105263\
15789473684210526315789473684210526315789473684210526315789473684210\
52631578947368421052631578947368421052631578947368421052631578947368\
42105263157894736842105263157894736842105263157894736842105263157894\
73684210526315789473684210526315789473684210526315789473684210526315\
78947368421052631578947368421052631578947368421052631578947368421052\
63157894736842105263157894736842105263157894736842105263157894736842\
10526315789473684210526315789473684210526315789473684210526315789473\
68421052631578947368421052631578947368421052631578947368421052631578\
94736842105263157894736842105263157894736842105263157894736842105263\
15789473684210526315789473684210526315789473684210526315789473684210\
52631578947368421052631578947368421052631578947368421052631578947368\
42105263157894736842105263157894736842105263157894736842105263157894\
73684210526315789473684210526315789473684210526315789473684210526315\
78947368421052631578947368421052631578947368421052631578947368421052\
63157894736842105263157894736842105263157894736842105263157894736842\
10526315789473684210526315789473684210526315789473684210526315789473\
68421052631578947368421052631578947368421052631578947368421052631578\
94736842105263157894736842105263157894736842105263157894736842105263\
15789473684210526315789473684210526315789473684210526315789473684210\
52631578947368421052631578947368421052631578947368421052631578947368\
42105263157894736842105263157894736842105263157894736842105263157894\
73684210526315789473684210526315789473684210526315789473684210526315\
78947368421052631578947368421052631578947368421052631578947368421052\
63157894736842105263157894736842105263157894736842105263157894736842\
10526315789473684210526315789473684210526315789473684210526315789473\
68421052631578947368421052631578947368421052631578947368421052631578\
94736842105263157894736842105263157894736842105263157894736842105263\
15789473684210526315789473684210526315789473684210526315789473684210\
52631578947368421052631578947368421052631578947368421052631578947368\
42105263157894736842105263157894736842105263157894736842105263157894\
73684210526315789473684210526315789473684210526315789473684210526315\
78947368421052631578947368421052631578947368421052631578947368421052\
63157894736842105263157894736842105263157894736842105263157894736842\
10526315789473684210526315789473684210526315789473684210526315789473\
68421052631578947368421052631578947368421052631578947368421052631578\
9473684210526315789

Diese Berechnung wurde auf einem Kleinstcomputer mit einer Freescale
ARM CPU in weniger als 0,03 Sekunden ausgefuehrt (einschliesslich
Ladezeit des Programms "bc").

Tschuess,
Juergen Ilse (***@usenet-verwaltung.de)
Hans Crauel
2020-12-07 11:02:33 UTC
Permalink
Juergen Ilse schrieb
Post by Juergen Ilse
Es gibt bereits genuegend "arbitrary precision calculation" librarys,
warum nicht einfach eine davon nutzen? Oder wenn du nur das Tool
benoetigen solltest: "bc" (in der unixwelt auf fat jedem system
verfuegbar) gibt es sicherlich auch fuer Windows ...
Weil es hier gerade einigermaßen passt:
Was unterscheidet eigentlich bc von apcalc, aufzurufen als calc?

Ich hatte vor sehr langer Zeit begonnen, calc zu verwenden, und
erst später bemerkt, dass bc sich für meine Anforderungen gleich
verhält und zudem beim Standard-Debian/Devuan immer schon dabei
ist, während man apcalc einzeln installieren muss (zudem ist das
binary von apcalc etwa zehnmal so groß wie das von bc).

Hans
Carlo XYZ
2020-12-07 11:22:25 UTC
Permalink
Post by Hans Crauel
Juergen Ilse schrieb
Post by Juergen Ilse
Es gibt bereits genuegend "arbitrary precision calculation" librarys,
warum nicht einfach eine davon nutzen? Oder wenn du nur das Tool
benoetigen solltest: "bc" (in der unixwelt auf fat jedem system
verfuegbar) gibt es sicherlich auch fuer Windows ...
Was unterscheidet eigentlich bc von apcalc, aufzurufen als calc?
Ich glaube, bc hat mehr Funktionen. Nicht sicher.
Post by Hans Crauel
Ich hatte vor sehr langer Zeit begonnen, calc zu verwenden, und
erst später bemerkt, dass bc sich für meine Anforderungen gleich
verhält und zudem beim Standard-Debian/Devuan immer schon dabei
ist, während man apcalc einzeln installieren muss (zudem ist das
binary von apcalc etwa zehnmal so groß wie das von bc).
Es gibt noch andere; vielleicht hast du Lust,

<https://askubuntu.com/questions/378661/any-command-line-calculator-for-ubuntu>

durchzusehen.
Jens Kallup
2020-12-07 12:52:18 UTC
Permalink
Hallo,

das Problem unter manchen *nix Betriebssystemen
ist die Tatsache, das unter Konsole/Terminal die
Rückgabe-Werte immer unterschiedlich sind.

So wird zum Beispiel der Rückgabe-Werte eines
Fehlers von einen Programm(e) sich im Bereich
von:
0 - kein Fehler, und
255 - Fehler xyz aufgetreten.

Also Byte/Word Werte.

Man kommt dem entgegen, das man andere Programme
in eine "Pipe" einreiht, die End-Werte als Zeichen-
kette zurück geliefert werden.

Okay, im Prinzip werden dort dann 2 Werte zurück
gegeben - bc gibt den Wert als String-Ausgabe am
Bildschirm aus, hat aber als Abschlusscode 0.
Weil 0 = kein Fehler.

Nun, das ist hier eine Mathe-Gruppe und keine Win
oder *nix vertiefende Gruppe.
Es ist natürlich freigestellt, und sogar erwünscht,
sich über die Ergebnisse und/oder Verwendung des im
Rahmen liegenden Programmes (hier: bc/apcalc) zu
unterhalten.

So wird Fachwissen weitergegeben und bleibt nicht im
Zimmerchen des einzelnen.

Gruß, Jens
Helmut Richter
2020-12-07 13:28:21 UTC
Permalink
Post by Hans Crauel
Juergen Ilse schrieb
Post by Juergen Ilse
Es gibt bereits genuegend "arbitrary precision calculation" librarys,
warum nicht einfach eine davon nutzen? Oder wenn du nur das Tool
benoetigen solltest: "bc" (in der unixwelt auf fat jedem system
verfuegbar) gibt es sicherlich auch fuer Windows ...
Was unterscheidet eigentlich bc von apcalc, aufzurufen als calc?
Ich hatte vor sehr langer Zeit begonnen, calc zu verwenden, und
erst später bemerkt, dass bc sich für meine Anforderungen gleich
verhält und zudem beim Standard-Debian/Devuan immer schon dabei
ist, während man apcalc einzeln installieren muss (zudem ist das
binary von apcalc etwa zehnmal so groß wie das von bc).
Heißer Tipp für die Fälle, wo man etwas berechnen will, ohne erst einen
Compiler anzuwerfen. Bis jetzt habe ich meistens perl genommen, aber das
kommt mit großen Zahlen nicht zurecht.
--
Helmut Richter
Carlo XYZ
2020-12-07 13:37:51 UTC
Permalink
Post by Helmut Richter
Post by Hans Crauel
Juergen Ilse schrieb
Post by Juergen Ilse
Es gibt bereits genuegend "arbitrary precision calculation" librarys,
warum nicht einfach eine davon nutzen? Oder wenn du nur das Tool
benoetigen solltest: "bc" (in der unixwelt auf fat jedem system
verfuegbar) gibt es sicherlich auch fuer Windows ...
Was unterscheidet eigentlich bc von apcalc, aufzurufen als calc?
Ich hatte vor sehr langer Zeit begonnen, calc zu verwenden, und
erst später bemerkt, dass bc sich für meine Anforderungen gleich
verhält und zudem beim Standard-Debian/Devuan immer schon dabei
ist, während man apcalc einzeln installieren muss (zudem ist das
binary von apcalc etwa zehnmal so groß wie das von bc).
Heißer Tipp für die Fälle, wo man etwas berechnen will, ohne erst einen
Compiler anzuwerfen. Bis jetzt habe ich meistens perl genommen, aber das
kommt mit großen Zahlen nicht zurecht.
"Was ist besser für Auflauf, Kartoffeln aus dem Glas
oder welche aus dem Sack, die man erst schälen muss?"

"Heißer Tipp, so ein Auflauf, wenn man Reste loswerden will.
Meistens nehme ich Nudeln, schmeckt aber anders."

Heißer Tipp für dich: "einzeln installieren" != "Compiler anwerfen".
Helmut Richter
2020-12-07 15:10:22 UTC
Permalink
Post by Carlo XYZ
"Was ist besser für Auflauf, Kartoffeln aus dem Glas
oder welche aus dem Sack, die man erst schälen muss?"
"Heißer Tipp, so ein Auflauf, wenn man Reste loswerden will.
Ja, genau so wars gemeint. Will ich Kartoffelreste loswerden, nehme ich
die Kartoffeln weder aus dem Glas noch aus dem Sack. Was nichts gegen das
Glas oder den Sack aussagt, sondern nur heißt, das man das nimmt, was
gerade am wenigsten Aufwand ist und das Problem löst.

Wenn ich aus irgendeinem – mir jetzt noch völlig schleierhaften – Grund
mal wissen will, welchen Rest 7^7^7 bei der Divison durch 83 lässt, werde
ich kein Programm in C oder sonstwas schreiben, sondern eine Zeile in bc
eintippen. Was nichts gegen C oder sonstwas aussagt. bc hatte ich zwar
schon immer installiert, war mir dessen aber nicht bewusst, deswegen
„heißer Tipp“.
--
Helmut Richter
Carlo XYZ
2020-12-07 15:33:19 UTC
Permalink
Post by Helmut Richter
Wenn ich aus irgendeinem – mir jetzt noch völlig schleierhaften – Grund
mal wissen will, welchen Rest 7^7^7 bei der Divison durch 83 lässt, werde
Wenn man Modulo-Arithmetik betreibt, zum Beispiel kryptografische,
kommt so etwas Ähnliches öfter mal vor. Und ja, bc ist dann super.
Post by Helmut Richter
ich kein Programm in C oder sonstwas schreiben, sondern eine Zeile in bc
eintippen. Was nichts gegen C oder sonstwas aussagt. bc hatte ich zwar
schon immer installiert, war mir dessen aber nicht bewusst, deswegen
„heißer Tipp“.
Danke für den kühlen Tipp, dass dein heißer Tipp sich auf bc bezog..;)

@OP: du könntest durch Debian verwirrt werden, wenn du es
noch nicht bist; dort gilt nämlich calc != apcalc = calc:

<https://debian.pkgs.org/10/debian-main-amd64/apcalc_2.12.7.2-2_amd64.deb.html>
Jens Kallup
2020-12-07 15:53:55 UTC
Permalink
Post by Carlo XYZ
@OP: du könntest durch Debian verwirrt werden, wenn du es
hihi.

kenn mich in Mathe recht wenig aus.
Meine Sparte ist so Datenbank und Compilerbau.

Daher meine Compiler-lästigen Post's.

Gruß in den Abend,

Jens
Martin Vaeth
2020-12-07 20:53:55 UTC
Permalink
Post by Helmut Richter
Bis jetzt habe ich meistens perl genommen, aber das
kommt mit großen Zahlen nicht zurecht.
perldoc Math::BigInt
perldoc Math::BigFloat

und eventuall noch

perldoc Math::BigInt::FastCalc
perldoc Math::BigInt::GMP
perldoc Math::BigInt::Pari
Helmut Richter
2020-12-08 16:55:30 UTC
Permalink
Post by Martin Vaeth
Post by Helmut Richter
Bis jetzt habe ich meistens perl genommen, aber das
kommt mit großen Zahlen nicht zurecht.
perldoc Math::BigInt
perldoc Math::BigFloat
Habe ich früher schon mal angesehen, aber aus Angst vor syntaktischem
Stacheldraht liegengelassen. Jedes „+“ wird „->badd(...)“ usw. Wer kann
das noch lesen, was da passiert?

Vielleicht kann mans auch benutzen, und die verraten nur nicht, wie.
--
Helmut Richter
Martin Vaeth
2020-12-08 21:03:37 UTC
Permalink
Post by Helmut Richter
Habe ich früher schon mal angesehen, aber aus Angst vor syntaktischem
Stacheldraht liegengelassen. Jedes „+“ wird „->badd(...)“ usw.
Da hättest Du besser die manpage gründlich lesen sollen:

: Overloading is also provided for Perl operators.

$ perl -e 'use Math::BigFloat; my $a = Math::BigFloat->new('7');
print 1 / $a + $a / 12;'
0.7261904761904761904761904761904761904762
Jens Kallup
2020-12-09 10:14:34 UTC
Permalink
Post by Martin Vaeth
$ perl -e 'use Math::BigFloat; my $a = Math::BigFloat->new('7');
print 1 / $a + $a / 12;'
0.7261904761904761904761904761904761904762
perl sollte ich mir mal anschauen, ok.
ich glaube diese Präzision ist ausreichend.
kann da Python mit numpy auch eingesetzt werden?

Jens
Juergen Ilse
2020-12-07 16:44:28 UTC
Permalink
Hallo,
Post by Hans Crauel
Juergen Ilse schrieb
Post by Juergen Ilse
Es gibt bereits genuegend "arbitrary precision calculation" librarys,
warum nicht einfach eine davon nutzen? Oder wenn du nur das Tool
benoetigen solltest: "bc" (in der unixwelt auf fat jedem system
verfuegbar) gibt es sicherlich auch fuer Windows ...
Was unterscheidet eigentlich bc von apcalc, aufzurufen als calc?
Unter anderem, dass ich letzteren noch nie benutzt habe ...
Im Ernst: keine Ahnung. Moeglicherweise haben beide einigermassen gleiche
Funktionalitaet, sind aber von unterschiedlichen Leuten geschrieben worden.
Ich weiss es nicht. "apcalc" ist glaube ich bei mir auch nirgends installiert.

Tschuess,
Juergen Ilse (***@usenet-verwaltung.de)
Stephan Herrmann
2020-12-06 11:40:25 UTC
Permalink
Post by Jens Kallup
Hallo,
Heute habe ich etwas beim suchen von Varianten bezüglich
leider konnte ich Deine Beispielrechnung nicht nachvollziehen.
Könntest Du eine allgemeine Beschreibung des Verfahrens posten,
oder einen Link auf eine solche teilen.

[...]
Post by Jens Kallup
Toll oder?
Das Aha Erlebnis hatte ich leider nicht, darum bin ich sehr
gespannt auch Deine Beschreibung.
Post by Jens Kallup
Frohen 2. Advent
Dem Wunsch schließe ich mich an
--
Stephan
Jens Kallup
2020-12-07 22:50:27 UTC
Permalink
Post by Stephan Herrmann
leider konnte ich Deine Beispielrechnung nicht nachvollziehen.
Könntest Du eine allgemeine Beschreibung des Verfahrens posten,
oder einen Link auf eine solche teilen.
Hallo,

durch Anregung durch den geteilten Link, hier in diesen Thread:

https://de.wikipedia.org/wiki/Sch%C3%B6nhage-Strassen-Algorithmus

habe ich mal überpflogen.
Fast der selbe Algorythmus kommt bei mir zum tragen.
Allerdings, so meine ich, ohne Fourier Berechnungen.

Ich kann das jetzt mathematisch von meiner Idee aus
dem die Codes entstanden nicht Ableiten, daher will
ich versuche, die schriftliche Darstellung zu bieten.

Wenn ich den Bezug auf Zahlen nenne, meine ich im
folgenden, das Zahlen (Ziffern) durch eine Zeichen-
kette (String) repräsentiert werden.

1. Schritt:
- man betrachtet die Zahlen a und b und füllt jeweils
beide Zahlen mit Nullen am Beginn und am Ende:
Beispiel:
12445,2 x 12,327

daraus macht man folgende zwei Zahlen-String's:

123445,200
000012,327

- als Randbemerkung zum Code: zusätzlich zu den Ziffern
habe ich am Anfang sowie am Ende der beiden String's
ein at Zeichen "@" angefügt.
Dieses @ dient der Bereichsüberprüfung:
also wo der String anfängt, und wo er endet.

- das ist wichtig wegen der Pascal Funktion "Copy" und
"delete".

2. Schritt:
- man geht nun mittels Schleife (while/loop/for) in
meinen Fall habe ich "while" als Schleife verwendet,
die in ihrer Definition darauf wartet, und prüft, ob
die Länge der beiden String's (eigentlich reicht eine
von den beiden, weil die String's ja gleich lang sind)
auf 1 / 0 abgesunken ist.
Denn durch den "delete" Befehl lösche ich jeweils das
letzte Zeichen der beiden String's.

- anschließend verwende ich Integer, also Ganz zahl Typen,
um die entnommenen (siehe "copy" und "StrToInt") Ziffer
von a und b zu multiplizieren.

- das mache ich so wie man das schriftlich machen würde von
der letzten Stellen, also "rechts" bis zur ersten Stelle,
also "links".

- mittendrin prüfe ich, ob der errechnet dritte Wert (numC)
ein Limit überschreitet (das währe bei 9 * 2 > 10).

- ist dem so, so verwende/ vielmehr hänge ich eine 1 an die
nächste (Vorgänger-Ziffer) an, also addiere ich zu a und b
1 und beginne von vorne mit der Berechnung.

- diese 1 wird im Computer-Literatur auch als Carry bezeichnet
im deutschen Sprachgebrauch würde man vielleicht von Remainder
schreiben/reden.

- ist die errechnete Zahl < 10, also 2 x 4,
dann setze ich das carry einfach auf Null.

Das ist eigentlich schon so im Groben die Multiplikation mit
meinen Codes.
Okay, ich gebe zu, dass es mühsam ist immer nur eine Ziffer
zur Berechnung von a und b zu verwenden.

Man könnte daher die Berechnung schneller, so optimieren, dass
4 Ziffern, also ein WORD, statt ein BYTE verwendet wird.

Das macht dann die Berechnung um ca. das doppelte schneller.

Was mir aufgefallen ist, das die 3 Grundrechenarten add, sub,
und mul fast die gleichen Codes verwenden.
Und man könnte auch hier hochtrabende Optimierungen machen.
Aber ich denke, das gibt dann nur Spagetti Salata Coda :-)

Gruß, Jens

P.S.: Freilich ist der von mir präsentierte Code nicht für
Produktive Zwecke geeignet - will ich auch nicht für
mich beanspruchen.
Es geht halt um die Durchführung, Machbarkeit und auf
Blick der Ressourcen mögliche Limitierungen.
Jens Kallup
2020-12-09 10:55:00 UTC
Permalink
Hallo,

mir ist ein wenig unklar, wie die folgende Formel
gelesen wird.
Auf wikipedia ist die Darstellung etwas zu mini.


2n-1 -2pi i
--- _-------- mk
\ X_k e -2n
fm = /
---
k = 0


m = 0, ..., 2n-1

wie berechnet man das?
ist -2pi i = -2^(pi*i) ?
ist e Eulerzahl ?

ist 2n-1 = 2*n-1 ?

kann man hier dividieren?

Jens
Lesen Sie weiter auf narkive:
Loading...