C++Guns – RoboBlog

13.06.2018

C++ Guns: fold over std::tuple of std::vector of Types ...

Filed under: Allgemein — Tags: — Thomas @ 16:06

Okay das ist ein seltsames Konstrukt. Wir haben viele Instanzen vieler Typen über die alle zusammen iteriert wird. Eigentlich ist der Code ziemlich klar. Ansonsten.... WOW was alles mit C++17 geht.

C++ Guns: nächste darstellbare Gleitkommazahl : std::nextafter

Filed under: Allgemein — Tags: — Thomas @ 11:06

std::nextafter(Arithmetic from, Arithmetic to) Returns the next representable value of from in the direction of to. Die nächste Zahl nach 1.0f ist dann 1.0000001192092895508. Hab das mal für eine Reihe von Zahlen mir ausgeben lassen. Und nicht nur die nächste Zahl, sondern bis zu 1000 nächst Zahlen. Hier das Programm für C++: Und hier das […]

05.06.2018

C++ Guns: fold over std::tuple und erzeugten Assembler Code

Filed under: Allgemein — Tags: — Thomas @ 00:06

Hier ein Ausschnitt aus dem Kniffel Spiel Code. Habe jede gültige Kombination als einen Typ dargestellt mit einem gemeinsamen Typ Score, welcher die erzielten Punkte enthält. Um die gesamte Punktzahl zu erhalten, muss über jeden Typ im tuple iteriert werden und die einzelnen Punkte aufaddiert. Dies wird mit std::apply und fold erledigt. Alternativ dazu wird […]

02.06.2018

C++ Guns: convert tuple to parameter pack

Filed under: Allgemein — Tags: — Thomas @ 10:06

Part1: print std::array with std:integer_sequence Part2: convert tuple to parameter pack Part 3: print std::array with std::apply and fold Guckst du hier https://en.cppreference.com/w/cpp/language/parameter_pack und hier https://en.cppreference.com/w/cpp/language/fold und da https://stackoverflow.com/questions/47216057/how-to-write-a-fold-sum-function-for-c-tuple parameter pack zu std::tuple ist einfach https://stackoverflow.com/questions/47216057/how-to-write-a-fold-sum-function-for-c-tuple Der template Type Ts besteht aus den drei einzelnen Typen int, double und const char*. Die Variable args... hält […]

C++ Guns: print std::array or std::tuple with std::apply and fold

Filed under: Allgemein — Tags: — Thomas @ 10:06

Part 1: print std::array with std:integer_sequence Part 2: convert tuple to parameter pack Part 3: print std::array or std::tuple with std::apply and fold Da ein std::array eigentlich auch nur so etwas wie ein tuple ist, nur nicht mit unterschiedlichen Typen, kann die ganze parameter pack und fold Sache auch auf std::array angewandt werden. Ja, eigentlich […]

01.06.2018

C++ Guns: Ein Paar Würfel

Filed under: Allgemein — Tags: — Thomas @ 14:06

Ich möchte zum Spaß ein Wüfelspiel programmieren. Dazu müssen einzelne Würfel implementiert werden. Doch was ist ein Würfel eigentlich? Offensichtlich ein Zufallszahlengenerator z.B. std::minstd_rand. Aber ein Würfel repräsentiert auch eine Gleichverteilung Ganzer Zahlen im Bereich von z.B. 1 bis 6. Und ein Würfel hat ein Status, seine Augenzahl. Die ändert sich ja nicht, egal wie […]

18.05.2018

C++ Guns: Choose the right datatype

Filed under: Allgemein — Tags: — Thomas @ 19:05

Hier ein sehr kleiner Ausschnitt aus der Praxis und der Assembercode. Verwendet wird ein Vector basierend auf SSEvalarray. Wir sehen ein paar MOVs und insbesondere zwei DIVs. Die Eingabevariable ist aber ein SSE Type. Warum sind dann auch zwei DIVs im Assember Code zu sehen? Na weil zwei Divisionen im C++ Code stehen. Um das […]

17.05.2018

C++ Guns: Point Concept

Filed under: Allgemein — Tags: — Thomas @ 11:05

Ich hab mich mal schnell in Concepts eingearbeitet und provisorisch die std library concepts implementiert. Darauf hin habe ich mir ein Concept eines PointND überlegt. Nun das müsste einfach nur ein Container sein, mit den Funktionen x(), y() und Operatoren für +, -, *, /. So wurde aus dem Stück Code mit viel Templates: dieses […]

16.05.2018

C++ Guns: SIMD PointND

Filed under: Allgemein — Tags: — Thomas @ 10:05

Kommen wir wieder zurück zu meinem Lieblingsdatentype: PointND. Diesmal mit SSE. In den letzten Posts hab ich den Type SIMDarray vorgestellt zum gleichzeitigen prozessieren von mehreren Werten. Danach folge SIMDvalarray Type welcher arithmetische Operation +, -, *, /, definierte. Was braucht es noch mehr zum SIMD PointND? Eigentlich nichts. Ein PointND ist ein fixed size […]

15.05.2018

C++ Guns: use templates and inline; don't use libraries

Filed under: Allgemein — Tags: — Thomas @ 19:05

Der Compiler kann wirklich ganz viel Optimieren, solange er das komplette Programm als Code sehen kann. Wird irgendwo eine Funktion aus einer Laufzeit-Bibliothek aufgerufen, ist es vorbei mit der Optimierung. Ein kleines Beispiel soll das verdeutlichen: Die Funktion foo ist nicht definiert, das gäbe einen Linker Error. Wichtig ist erst einmal, dass zur Compilezeit nicht […]

Older Posts »

Powered by WordPress