Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Zitat von »"FalkT"«
C-/C++-Quelltext
1 2 3 int a = x / 2; // sehr nett :D int a = x * 0.5; // definitiv schneller int a = x >> 1; // auch schnell
Administrator
Zitat von »"Nexus"«
1-Bit-Fliesskommazahlen wären recht ungenau. Ich denke auch nicht, dass viele Prozessoren Befehle für 1-Bit-Fliesskommaarithmetik kennen.
Administrator
Zitat von »"FalkT"«
C-/C++-Quelltext
1 2 int a = x / 2; // sehr nett :D int a = x * 0.5; // definitiv schneller
Zitat von »"David Scherfgen"«
Zitat von »"Nexus"«
1-Bit-Fliesskommazahlen wären recht ungenau. Ich denke auch nicht, dass viele Prozessoren Befehle für 1-Bit-Fliesskommaarithmetik kennen.
In der Tat, schließlich könnte man mit 1 Bit genau 2 Zahlen darstellen!
idontknow
unregistriert
Zitat von »"Nexus"«
Ah, weil Multiplikation keine Grundfunktion ist? :pZitat von »"idontknow"«
Standardmäßig kann die CPU bestimmter Microcontroller weder multiplizieren noch dividieren, ist also keine Grundfunktion die die ALU beherrscht!
Daher würde ich dividieren mit Multiplikation umgehen sollte deutlich schneller sein!
Division kann man lange nicht immer durch Multiplikation implementieren. Das geht nur in einfachen Spezialfällen mit vorher bekannten Konstanten (statt halbieren mit 1/2 multiplizieren).
Zitat von »"FalkT"«
C-/C++-Quelltext
1 2 int a = x / 2; // sehr nett :D int a = x * 0.5; // definitiv schneller
Gibt doch ein paar sinnvolle Operationen, die man mit 1 Bit durchführen kann. Invertieren zum Beispiel. :lol:Zitat von »"David Scherfgen"«
In der Tat, schließlich könnte man mit 1 Bit genau 2 Zahlen darstellen!
Das kommt sehr auf den Compiler an. Aber ohne Optimierungen - rein von C++ her - entstehen unterschiedliche Codes. Die erste Anweisung erzeugt eine Integer-Division durch zwei, die zweite eine Fliesskomma-Multiplikation (double) und Umwandlung. Und ich habe das Gefühl, dass / 2 viel viel leichter zu einem Shift wegoptimiert werden kann als * 0.5.Zitat von »"fred2507"«
meines wissens macht der compiler letztendlich den gleichen maschinencode draus.
Naja, grundsätzlich kann man fast alles, was in C möglich ist, auch in C++ hinbringen. Zudem hat Abstraktion keinen direkten Einfluss auf die Laufzeit - objektorientierter Code ist nicht langsamer. Allerdings können gewisse konkrete Implementierungen wie die STL auf auf die allgemeine Verwendung optimiert sein, was bei Mikrokontrollern unter Umständen einen Nachteil mit sich bringt (zum Beispiel seitens Code-Bloat und Speicherverbrauch).Zitat von »"Sizzla"«
wäre bei so ein einfachen Robo mit schwachen Bauteilen nicht besser mit C oder noch besser mit assemblern zu programmieren..
Ist der aufwand zwar größer aber das ergebnis vl besser..
Zitat von »"Nexus"«
Naja, grundsätzlich kann man fast alles, was in C möglich ist, auch in C++ hinbringen. Zudem hat Abstraktion keinen direkten Einfluss auf die Laufzeit - objektorientierter Code ist nicht langsamer.
Klar, aber objektorientierter Code ist nicht per se langsamer. Genauso kann er schneller sein. Schönes Beispiel, wo C++ gegenüber C einen Vorteil hat, ist bei std::sort() vs. qsort(), weil der übergebene Funktor direkt geinlinet werden kann, während bei C nur ein typenloser Funktionszeiger vorhanden ist. Natürlich kann es sein, dass man durch einzelne Low-Level-Algorithmen besser optimieren kann, weil man sich direkt an die Hardware anpasst. Dazu muss man sich allerdings recht gut auskennen; es braucht nicht viel, bis man trotzdem schlechtere Resulate erzielt. Von daher sollte man sich an solche Möglichkeiten erst heranwagen, wenn es keine anderen Auswege mehr gibt und am betreffenden Ort ein tatsächliches Performanceproblem besteht. Zudem ist zu bedenken, dass heutige Compiler sehr gut optimieren können - teilweise besser als der Mensch.Zitat von »"Jonathan_Klein"«
Oooch, er kann durchaus langsamer sein.
Werbeanzeige