Du bist nicht angemeldet.

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

11

17.10.2009, 22:03

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


Wobei jeder halbwegs gescheite Compiler das so weg optimiert, dass alles genau gleich schnell ist. Wenn der Faktor natürlich nicht konstant ist, also in einer Variable stehen, dann stimmt es natürlich.
Lieber dumm fragen, als dumm bleiben!

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

12

17.10.2009, 23:55

Re: Größe von Variablen festlegen?

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! :D

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

13

17.10.2009, 23:56

Zitat von »"FalkT"«

C-/C++-Quelltext

1
2
int a = x / 2;  // sehr nett :D

int a = x * 0.5; // definitiv schneller

Nein, das wäre langsamer, wenn er es so machen würde - denn er müsste zwischen int und double hin und her rechnen!

14

17.10.2009, 23:56

Re: Größe von Variablen festlegen?

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! :D


ich denke er meint einen byte ;)

idontknow

unregistriert

15

18.10.2009, 00:17

Zitat von »"Nexus"«

Zitat 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!
Ah, weil Multiplikation keine Grundfunktion ist? :p

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).


afaik können einige Mikroprozessoren einfach nicht Dividieren (in dem Sinne wie sie addieren/multiplizieren). Dividieren muss irgendwie anderst umgesetzt werden, kommt natürlich auch auf den Prozessor drauf an, mehr weiß ich darüber auch nicht, wir nehmen das nicht so genau durch!

16

18.10.2009, 00:21

Zitat von »"FalkT"«

C-/C++-Quelltext

1
2
int a = x / 2;  // sehr nett :D

int a = x * 0.5; // definitiv schneller


meines wissens macht der compiler letztendlich den gleichen maschinencode draus.

Sizzla

Frischling

Beiträge: 72

Wohnort: Klagenfurt

  • Private Nachricht senden

17

18.10.2009, 00:46

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..
Die Kollegen hier wissen das aber sicher besser.
Künstliche Intelligenz ist leichter zu ertragen als natürliche Dummheit !
--------------------------
http://www.kasser-manuel.com

18

18.10.2009, 01:43

Re: Größe von Variablen festlegen?

Zitat von »"David Scherfgen"«

In der Tat, schließlich könnte man mit 1 Bit genau 2 Zahlen darstellen! :D
Gibt doch ein paar sinnvolle Operationen, die man mit 1 Bit durchführen kann. Invertieren zum Beispiel. :lol:
Ich meinte natürlich Byte...

Zitat von »"fred2507"«

meines wissens macht der compiler letztendlich den gleichen maschinencode draus.
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 »"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..
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).

Ich kann mich nur wiederholen: Bevor man voreilige Schlüsse zieht und dann möglicherweise einen Weg wählt, der viel mühsamer ist, aber kaum Performancegewinne bringt, sollte man sich genau informieren und Zeiten messen. Dann können die wirklichen Flaschenhälse genauer betrachtet werden. Üblicherweise sind das nicht Divisionen (kann natürlich trotzdem sein).

19

18.10.2009, 12:13

Re: Größe von Variablen festlegen?

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.

Oooch, er kann durchaus langsamer sein. Vielleicht weil einiges Private ist und man einen Funktionsaufruf braucht, um an den Wert zu kommen (der dumemrweise gerade nciht inline war), oder wenn man virtuelle Funktionen benutzt, wo die arme CPU dann erst die Funktionsadresse raussuchen muss.
Ich will damit nur sagen, dass im extremen LowLevel Bereich eine komplexe Objekthierarchie schon ein wenig was ausmachen kann. (In allen anderen Fällen ist OOP natürlich toll, weil man schneller ist und weniger Fehler macht).
Lieber dumm fragen, als dumm bleiben!

20

18.10.2009, 16:52

Re: Größe von Variablen festlegen?

Zitat von »"Jonathan_Klein"«

Oooch, er kann durchaus langsamer sein.
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.

Was mich stört, ist der verbreitete Irrglaube, dass Objektorientierung und Abstraktion schlechtere Laufzeitverhältnisse implizieren. Virtuelle Funktionen sind zum Beispiel ein weiteres Schlagwort für Langsamkeit. Sehr selten denkt dabei jemand daran, dass auch auf tieferer Abstraktionsebene eine Auswahl zwischen verschiedenen Ablaufpfaden realisiert werden muss - ob das schlussendlich if, switch, selbst gebaute Funktionszeiger-Sprungtabellen oder gleich "richtige" virtuelle Funktionen sind, spielt im Allgemeinen keine grosser Rolle mehr.

Werbeanzeige