String in Integer konvertieren und den Integer als ganze Zahl werten
-
@Swordfish sagte in String in Integer konvertieren und den Integer als ganze Zahl werten:
?
Warum ist dein „stoi“ keine Funktion?
-
@DirkB Faulheit.
-
@DirkB sagte in String in Integer konvertieren und den Integer als ganze Zahl werten:
@Belli Nein.
so bitte nicht.Warum nicht?
Die Zehnerpotenzen kann man vorher ausrechnen und als Tabelle speichern.Alexandrescu hat mal irgendwann gezeigt, dass das so sogar schneller ist als das ständige Multiplizieren des Zwischenergebnisses mit 10, weil es Datenabhängigkeiten reduziert. https://www.youtube.com/watch?v=mYzaFzAHuZ4&t=500
-
@wob sagte in String in Integer konvertieren und den Integer als ganze Zahl werten:
Danke, das hatte ich schon gesucht. Sehenswert.
Ansonsten möchte ich mit an das "Warum nicht?" anschliessen und frage mich wie denn sonst? Sehe das Schema von @Belli auch eher als mathematische Hilfestellung. Die Lösung von @Swordfish und typische
atoi
-Implementierungen sind letztendlich auch nur Varianten davon.
-
@Finnegan sagte in String in Integer konvertieren und den Integer als ganze Zahl werten:
@wob sagte in String in Integer konvertieren und den Integer als ganze Zahl werten:
Danke, das hatte ich schon gesucht. Sehenswert.
Ich fand das gar nicht gut. Er labert 13 Minuten lang über etwas, das man in 3 Minuten hätte sagen können. So muss ich mich als Zuhörer anstrengen, die 3 relevanten Minuten aus dem Rauschen auszufiltern, anstatt mich auf den Inhalt zu konzentrieren. Ich weiß jetzt auch gar nicht, was genau das Ergebnis seiner Messung war, da ich am Ende nur noch genervt in 30 Sekundenschritten gesprungen bin, und dabei den einen Satz zu seinem Ergebnis nicht finden konnte, da er stattdessen 5 Minuten darüber geschwurbelt hat, wie toll sein (unbeschriftetes ) Diagramm wäre. Immerhin war ich so glücklich, dass ich beim Spulen zufällig die zwei Sekunden getroffen habe, in denen er sagt, warum das effizienter ist.
-
@Finnegan sagte in String in Integer konvertieren und den Integer als ganze Zahl werten:
Ansonsten möchte ich mit an das "Warum nicht?" anschliessen und frage mich wie denn sonst? Sehe das Schema von @Belli auch eher als mathematische Hilfestellung. Die Lösung von @Swordfish und typische
atoi
-Implementierungen sind letztendlich auch nur Varianten davon.Warum nicht:
- Weil der "klassische" Algorithmus mit einem Minimum an Code auskommt, keine vorberechneten Konstanten braucht, und sich direkt aus der mathematischen Definition der Darstellung ergibt. Das ist halt einfach elegant, wenn man einen Algorithmus so aufbaut. Das schult im Denken, wenn man lernt, seine Algorithmen so zu bauen.
- Der klassische Algorithmus kommt auch mit einem Minimum an Rechenoperationen aus. Da darf man erst einmal davon ausgehen, dass das wahrscheinlich auch der schnellste Weg ist.
Nun ist die Folgerung aus Punkt 2 halt falsch, weil moderne Prozessorarchitekturen nicht so funktionieren, wie man es naiv erwartet (wie Alexandrescu in 2 Sekunden seines 13 Minuten Vortrags erklärt). Ich finde es aber trotzdem gerechtfertigt, dem Anfänger den klassischen Algorithmus nahe zu bringen, wegen Punkt 1.
-
@SeppJ sagte in String in Integer konvertieren und den Integer als ganze Zahl werten:
sich direkt aus der mathematischen Definition der Darstellung ergibt
Was soll das denn heißen? Bei "mathematischer Definition" hab ich jetzt an b-adischen Bruch gedacht, was aber das von Belli ist..was meintest du?
-
@Jockelx sagte in String in Integer konvertieren und den Integer als ganze Zahl werten:
@SeppJ sagte in String in Integer konvertieren und den Integer als ganze Zahl werten:
sich direkt aus der mathematischen Definition der Darstellung ergibt
Was soll das denn heißen? Bei "mathematischer Definition" hab ich jetzt an b-adischen Bruch gedacht, was aber das von Belli ist..was meintest du?
Die beiden vorgestellten Methoden ergeben sich beide direkt aus der Definition. Das war nicht zum Vergleich der beiden Methoden gedacht, sondern zur Definition, was ich unter "elegant" verstehe. Der Belli-Algorithmus ergibt sich zwar auch direkt aus der Definition, aber er braucht mehr Code und magische Konstanten und ist deswegen weniger elegant.
Ein Beispiel für einen berühmten Algorithmus, der sich nicht aus der Mathematik ergibt (oder jedenfalls nicht intuitiv ableitbar), nenne ich mal die inverse Quadratwurzel aus Quake 3: https://en.wikipedia.org/wiki/Fast_inverse_square_root
Dieser Algorithmus hat in meinen Augen zwar auch schön, aber "elegant" würde ich es nicht nennen. Mir fällt gerade kein gutes Wort ein. Jedenfalls würde ich ihn nicht empfehlen, wenn eine Hausaufgabe für Anfänger verlangt, dass man eine Wurzel selber implementieren soll.
-
Ich freu mich, dass ich Verfechter für meinen Weg gefunden habe
Ich finde aber auch:
zahl = zahl * 10 + nextZiffer;
eleganter; ich bin nur nicht drauf gekommen
-
@SeppJ sagte in String in Integer konvertieren und den Integer als ganze Zahl werten:
@Finnegan sagte in String in Integer konvertieren und den Integer als ganze Zahl werten:
Danke, das hatte ich schon gesucht. Sehenswert.
Ich fand das gar nicht gut. Er labert 13 Minuten lang über etwas, das man in 3 Minuten hätte sagen können.
Das haben fast alle in Videos verpackte Informationen so an sich. Wenn ich schnelle Informationen möchte, bevorzuge ich auch einen kurzen und bündigen Text.
(Ansonsten Geschmackssache, ich finde seinen Stil unterhaltsam und kann mir sowas gut zum relaxen ansehen - daher rührt auch mein "sehenswert". Wenn mir nur die eine kurze Info interessierte, bekäme ich aber wohl auch die Krise, zumal auch die Aufnahmequalität auch noch mäßig ist)
@SeppJ sagte in String in Integer konvertieren und den Integer als ganze Zahl werten:
Warum nicht:
Ja, den klassichen Algorithmus finde ich für Anfänger auch gut geeignet. Dennoch kann ich auch nichts schlimmes an z.B. einem
zahl += ziffer * wertigkeit; wertigkeit *= 10;
erkennen. Da braucht es auch keine Konstanten und folgt dennoch @Belli s Ansatz. Dass so ein statisches Konstanten-Array für Anfänger verwirrend wäre sehe ich auch so. Ich hatte auch nicht vor, Anfängern hier die Alexandrescu-Lösung zu verkaufen
-
@Finnegan sagte in String in Integer konvertieren und den Integer als ganze Zahl werten:
Dennoch kann ich auch nichts schlimmes an z.B. einem
zahl += ziffer * wertigkeit; wertigkeit *= 10;
erkennen. Da braucht es auch keine Konstanten und folgt dennoch @Belli s Ansatz.Naja es braucht halt mehr Operationen und man muss verkehrt herum über die Zahl iterieren.
Verkehrt herum ist schon OK, so lange man dafür was bekommt. Z.B. mehr Speed bekommt, weil man nen Table aus Zehnerpotenzen verwendet. Aber wenn man nix davon hat? Hm.
-
@hustbaer sagte in String in Integer konvertieren und den Integer als ganze Zahl werten:
Naja es braucht halt mehr Operationen
Es ist eine Multiplikation mit 0
und man muss verkehrt herum über die Zahl iterieren.
aber richtig rum durch den String.
Und man kann die Basis leicht ändern.
Wie ist das eigentlich mit Überläufen?
-
@DirkB sagte in String in Integer konvertieren und den Integer als ganze Zahl werten:
@hustbaer sagte in String in Integer konvertieren und den Integer als ganze Zahl werten:
Naja es braucht halt mehr Operationen
Es ist eine Multiplikation mit 0
Hä?
und man muss verkehrt herum über die Zahl iterieren.
aber richtig rum durch den String.
Nein eben gerade nicht.
Und man kann die Basis leicht ändern.
Das kann man in der einfacheren
val = val * 10 + digit
Variante genau so.Wie ist das eigentlich mit Überläufen?
Was soll mit Überläufen sein? Auf die muss man halt testen wenn man sie erkennen will.
-
@hustbaer sagte in String in Integer konvertieren und den Integer als ganze Zahl werten:
Naja es braucht halt mehr Operationen und man muss verkehrt herum über die Zahl iterieren.
Das sehe ich auf jeden Fall ein. Dennoch kein Grund für ein "Nein. So bitte nicht.", was die ganze Diskussion überhaupt erst angestoßen hat
-
@Finnegan Hat mich auch gewundert. Ich hab's dann auf das "10^n" bezogen verstanden. Denn wer sowas mit
exp()
implementiert, der gehört wirklich gehauen. Nicht nur wegen langsam sondern auch weil man für sowas einfach keine Gleitkommazahlen und keine transzendenten Funktionen nimmt. Und ja, sowas hab ich schon gesehen.
-
@hustbaer sagte in String in Integer konvertieren und den Integer als ganze Zahl werten:
@Finnegan Hat mich auch gewundert. Ich hab's dann auf das "10^n" bezogen verstanden.
Habe @Belli s
zahl=...
-Rechenvorschrift sogar als reine mathematische Hilfestellung gelesen aus, der man erstmal einen Algoritmus stricken muss. Für mich fiel da jeder der hier diskutieren Algorithmen darunter, mit dem einzigen Unterschied dass sie eben anders zum Ergebnis kommen.Der beste Algo konvertiert eh in ausschließlich in einen BCD-Integer
-
@Finnegan Damit wird ma aber auch nur glücklich wemma an Mainframe hat
-
@Finnegan sagte in String in Integer konvertieren und den Integer als ganze Zahl werten:
@hustbaer sagte in String in Integer konvertieren und den Integer als ganze Zahl werten:
@Finnegan Hat mich auch gewundert. Ich hab's dann auf das "10^n" bezogen verstanden.
Habe @Belli s
zahl=...
-Rechenvorschrift sogar als reine mathematische Hilfestellung gelesen aus, der man erstmal einen Algoritmus stricken muss.Jo ... so war es auch gemeint, Hilfe zur Selbsthilfe halt, ich schreib zwar manchmal auch fertige Lösungen, aber das sollte ja eher die Ausnahme sein