Navigation

    cpp-logo

    C++ Community

    • Registrieren
    • Anmelden
    • Suche
    • Kategorien
    • Aktuell
    • Tags
    • Beliebt
    • Gruppen
    1. Übersicht
    2. Beliebt
    Melde dich an, um einen Beitrag zu erstellen
    • Alle Kategorien
    • Ankündigungen
    •      Die Artikel
    • C++ (alle ISO-Standards)
    •      MFC
    •      VCL (C++ Builder)
    •      C++/CLI mit .NET
    •      Andere GUIs - Qt, GTK+, wxWidgets
    • Sonstige Programmiersprachen
    •      C (alle ISO-Standards)
    •      C# und .NET
    •      Java
    •      Assembler
    •      Webzeugs
    • Betriebssysteme
    •      WinAPI
    •      Linux/Unix
    •      Projekt: OS-Development
    •      DOS und Win32-Konsole (nur Lesen)
    • Weitere Fachbereiche
    •      Mathematik und Physik
    •      Spiele-/Grafikprogrammierung
    •      Datenbanken
    •      Compiler- und IDE-Forum
    •      Projekte
    • Jenseits der Programmierung
    •      Beruf und Ausbildung
    •      Stellenangebote
    •      Themen rund um die IT
    •      Gaming-Corner
    • Forentechnik
    • Archiv
    •      Das C++ Magazin
    •          Die Redaktion
    •          Die Autoren
    •          Allgemeines zum Magazin
    •          Archiv
    •      Organisation des Forumtreffens
    •      FAQs - Frequently Asked Questions
    •          FAQ - C (C89, C99 und C11)
    •          FAQ - Assembler
    •          FAQ - C++ (auch C++0x, C++11)
    •          FAQ - C++/CLI
    •          FAQ - C++ Builder (VCL/CLX)
    •          FAQ - C# und .NET
    •          FAQ - Compiler & IDEs
    •          FAQ - Datenbanken
    •          FAQ - DOS und Win32-Konsole
    •          FAQ - Grafik-/Spieleprogrammierung
    •          FAQ - GUIs
    •          FAQ - Java
    •          FAQ - Linux/Unix
    •          FAQ - Mathematik und Physik
    •          FAQ - MFC
    •          FAQ - Rund um die Programmierung
    •          FAQ - Sonstiges
    •          FAQ - Webzeugs
    •          FAQ - WinAPI
    •          FAQ - Forentechnik
    • Alle Themen
    • Neue Themen
    • Beobachtete Themen
    • Unbeantwortete Themen
    • Gesamter Zeitraum
    • Tag
    • Woche
    • Monat

    • L

      Funktion optimieren
      Assembler • • Lennox  

      47
      0
      Stimmen
      47
      Beiträge
      892
      Aufrufe

      L

      #include <stdio.h> #include <stdlib.h> #include <time.h> volatile size_t initial_seed = 123; size_t total_hash = 23; // A structure for the future rating system. typedef struct score { size_t index; size_t index_2; double seconds; double total_seconds; size_t total_points; char *name; void (*func)(size_t, size_t *); } SCORE; size_t rand1(size_t seed, size_t max) { size_t a = 16807; return (a * seed) % max; } size_t my_rand(size_t max) { size_t r = rand1(initial_seed, max); initial_seed = rand1(initial_seed, -1); return r; } void rfill(size_t n, size_t m, size_t a[m][n]) { for (size_t i = 0; i < m; i++) { for (size_t j = 0; j < n; j++) { a[i][j] = my_rand(51); } } } double average(size_t n, size_t a[]) { // The average should be around 25. double average = 0; for (size_t i = 0; i < n; i++) { average += (double)a[i] / (double)n; } return average; } // Fast, combining hash function with few collisions and h(a,b) often not equal to h(b,a)... size_t my_hash(size_t a, size_t b) { return a * 31 + b; } void add_to_total_hash(size_t n, size_t m, size_t a[m][n]) { for (size_t i = 0; i < m; i++) { for (size_t j = 0; j < n; j++) { total_hash = my_hash(total_hash, a[i][j]); } } } void print(size_t n, size_t m, size_t a[m][n]) { add_to_total_hash(n, m, a); for (size_t i = 0; i < n; i++) { printf("%zu ", a[0][i]); } printf("\na: %f\n...\n", average(n, a[0])); // ... for (size_t i = 0; i < n; i++) { printf("%zu ", a[m - 1][i]); } printf("\na: %f\nh: %zu\n\n", average(n, a[m - 1]), total_hash); } // Comparison function for sort_a int compare(const void *a, const void *b) { return (*(size_t *)a - *(size_t *)b); } // Comparison function for score seconds int compare_score_seconds(const void *a, const void *b) { double a_dbl = ((SCORE *)a)->seconds; double b_dbl = ((SCORE *)b)->seconds; return a_dbl < b_dbl ? -1 : a_dbl > b_dbl ? +1 : 0; } // Comparison function for score total points int compare_score_total_points(const void *a, const void *b) { int a_int = ((SCORE *)a)->total_points; int b_int = ((SCORE *)b)->total_points; return b_int - a_int; } // Quicksort void sort_a_quick(size_t n, size_t arr[]) { qsort(arr, n, sizeof(size_t), compare); } // Bubble sort void sort_b_bubble(size_t n, size_t arr[]) { size_t i = 0, j = 1, a, b; while (j < n) { a = arr[i]; b = arr[j]; if (a > b) { arr[i] = b; arr[j] = a; i = 0; j = 1; continue; } i++; j++; } } // Selection sort void sort_c_selection(size_t n, size_t arr[]) { for (size_t i = 0; i < n - 1; i++) { size_t a = i; size_t b = arr[i]; for (size_t j = i + 1; j < n; j++) { if (arr[j] < b) { a = j; b = arr[j]; } } arr[a] = arr[i]; arr[i] = b; } } // Insertion sort void sort_d_insertion(size_t n, size_t arr[]) { size_t i = 0, j = 1, k, l, a, b; while (j < n) { a = arr[i]; b = arr[j]; if (a > b) { k = i; l = j; do { arr[k] = b; arr[l] = a; if (k == 0) { break; } k--; l--; a = arr[k]; b = arr[l]; } while (a > b); } i++; j++; } } #pragma GCC push_options #pragma GCC optimize("O0") void sort_e_insertion_optimized(size_t n, size_t arr[]) { asm volatile( " movq %%rdi, -56(%%rbp) \n" " movq %%rsi, -64(%%rbp) \n" " movq $0, -8(%%rbp) \n" " subq $1, -8(%%rbp) \n" " movq $0, -16(%%rbp) \n" "1: \n" " addq $1, -16(%%rbp) \n" " movq -16(%%rbp), %%rax \n" " cmpq -56(%%rbp), %%rax \n" " jnb 3f \n" " addq $1, -8(%%rbp) \n" " movq -8(%%rbp), %%rax \n" " leaq 0(,%%rax,8), %%rdx \n" " movq -64(%%rbp), %%rax \n" " addq %%rdx, %%rax \n" " movq (%%rax), %%rax \n" " movq %%rax, -40(%%rbp) \n" " movq -16(%%rbp), %%rax \n" " leaq 0(,%%rax,8), %%rdx \n" " movq -64(%%rbp), %%rax \n" " addq %%rdx, %%rax \n" " movq (%%rax), %%rax \n" " movq %%rax, -48(%%rbp) \n" " movq -40(%%rbp), %%rax \n" " cmpq %%rax, -48(%%rbp) \n" " jnb 1b \n" " movq -8(%%rbp), %%rax \n" " movq %%rax, -24(%%rbp) \n" " movq -16(%%rbp), %%rax \n" " movq %%rax, -32(%%rbp) \n" "2: \n" " movq -24(%%rbp), %%rax \n" " leaq 0(,%%rax,8), %%rdx \n" " movq -64(%%rbp), %%rax \n" " addq %%rax, %%rdx \n" " movq -48(%%rbp), %%rax \n" " movq %%rax, (%%rdx) \n" " movq -32(%%rbp), %%rax \n" " leaq 0(,%%rax,8), %%rdx \n" " movq -64(%%rbp), %%rax \n" " addq %%rax, %%rdx \n" " movq -40(%%rbp), %%rax \n" " movq %%rax, (%%rdx) \n" " cmpq $0, -24(%%rbp) \n" " je 1b \n" " subq $1, -24(%%rbp) \n" " subq $1, -32(%%rbp) \n" " movq -24(%%rbp), %%rax \n" " leaq 0(,%%rax,8), %%rdx \n" " movq -64(%%rbp), %%rax \n" " addq %%rdx, %%rax \n" " movq (%%rax), %%rax \n" " movq %%rax, -40(%%rbp) \n" " movq -32(%%rbp), %%rax \n" " leaq 0(,%%rax,8), %%rdx \n" " movq -64(%%rbp), %%rax \n" " addq %%rdx, %%rax \n" " movq (%%rax), %%rax \n" " movq %%rax, -48(%%rbp) \n" " movq -40(%%rbp), %%rax \n" " cmpq %%rax, -48(%%rbp) \n" " jnb 1b \n" " jmp 2b \n" "3: \n" : /* No outputs. */ : /* No inputs. */ : "memory"); } #pragma GCC pop_options double profile_sort_func(void (*f)(size_t, size_t *), size_t n, size_t m, size_t arr[m][n]) { rfill(n, m, arr); print(n, m, arr); clock_t c1 = clock(); for (size_t i = 0; i < m; i++) { (*f)(n, arr[i]); } clock_t c2 = clock(); print(n, m, arr); return (double)(c2 - c1) / CLOCKS_PER_SEC; } size_t scores_len = 5; SCORE scores[] = { {0, 0, 0, 0, 0, "q-sort ", sort_a_quick}, {1, 1, 0, 0, 0, "bubble ", sort_b_bubble}, {2, 2, 0, 0, 0, "select ", sort_c_selection}, {3, 3, 0, 0, 0, "insert ", sort_d_insertion}, {4, 4, 0, 0, 0, "insert_asm", sort_e_insertion_optimized}, }; size_t get_sort_winner(size_t n, size_t m) { // Prepare the array for testing size_t arr[m][n]; for (size_t i = 0; i < scores_len; i++) { scores[i].seconds = profile_sort_func(scores[i].func, n, m, arr); scores[i].total_seconds += scores[i].seconds; } // Copy the results so that you can sort them SCORE scores_cpy[scores_len]; for (size_t i = 0; i < scores_len; i++) { scores_cpy[i] = scores[i]; } // Sort by current duration qsort(scores_cpy, scores_len, sizeof(SCORE), compare_score_seconds); double factor = 100 / scores_cpy[scores_len - 1].seconds; size_t winner = scores_cpy[0].index; for (size_t i = 0; i < scores_len; i++) { scores[scores_cpy[i].index].index_2 = i; } for (size_t i = 0; i < scores_len; i++) { scores[i].total_points += scores_len - scores[i].index_2; } // Sort by total points qsort(scores_cpy, scores_len, sizeof(SCORE), compare_score_total_points); for (size_t i = 0; i < scores_len; i++) { scores[scores_cpy[i].index].index_2 = i; } for (size_t i = 0; i < scores_len; i++) { printf("%s: (%zu %zu.) %fs %f%% %fts %zu total_points\n", scores[i].name, scores[i].index, scores[i].index_2 + 1, scores[i].seconds, scores[i].seconds * factor, scores[i].total_seconds, scores[i].total_points); } return winner; } // Compile with "gcc -Wall -O0 main.c -o main" or with "gcc -Wall -O3 main.c -o main" int main(int argc, char const *argv[]) { size_t n = 10; size_t m = 10000; // Play until the current winner is equal to qsort while (get_sort_winner(n++, m)) ; printf("n_max=%zu\n", n - 1); }
    • E

      Funktionales Bewusstsein für ein Programm mit lokaler KI
      Projekte • • Erhard Henkes  

      11
      2
      Stimmen
      11
      Beiträge
      282
      Aufrufe

      E

      Eine mögliche Weiterentwicklung wäre: Drei Programme, eine lokale KI Agent 1: das bestehende Bewusstseins-Programm (Analyst, z. B. „Sachverständiger“). Agent 2: zweites Exemplar (z. B. „Kritiker“ oder „Praktiker“). ListenpunktTalkmaster: neues, dünnes Programm, das nur: die Frage des Users entgegennimmt, entscheidet, welchen Agenten er anspricht, Antworten einsammelt, sie ggf. leicht umformuliert und an den nächsten Agenten weitergibt. Alle drei in der Talkrunde: laufen als eigene EXEs (WinForms), sprechen mit derselben lokalen Ollama-Instanz (z. B. http://localhost:11434), haben ihre eigenen Bewusstseins-States (SelfModel, Memory, Values etc.). Also wirklich drei getrennte „Ichs“. EDIT: Technisch läuft es schon.
    • String in 2 Schleifen auseinanderpflücken
      C++ (alle ISO-Standards) • • thuering  

      3
      0
      Stimmen
      3
      Beiträge
      134
      Aufrufe

      @Th69 Danke! Ich war gestern wohl zu müde...
    • F

      Softwareentwickler (m/w/d) C#/ C++ / Düsseldorf
      Stellenangebote • festanstellung c++ datenbank sql-datenbanken • • Finovesta GmbH  

      1
      0
      Stimmen
      1
      Beiträge
      25
      Aufrufe

      F

      Die FINOV€STA GmbH ist ein aufstrebendes, dynamisches, stetig und gesund wachsendes Unternehmen mit derzeit 45 Angestellten. Das Kerngeschäft liegt im Handel mit Wertpapieren und Derivaten jeglicher Art. FINOV€STA hält eigene Mitgliedschaften an vielen nationalen und internationalen Börsen und ist über Broker zusätzlich an weitere Märkte angebunden. FINOV€STA tätigt ausschließlich Geschäfte im eigenen Namen und auf eigene Rechnung. Innovative Handelsstrategien, modernste Technik sowie hervorragend ausgebildete und motivierte Mitarbeiterinnen und Mitarbeiter machen den konstanten Erfolg des Unternehmens aus. Um unser erfolgreiches Geschäftsmodell weiter auszubauen, suchen wir Sie (m/w/d) zur Unterstützung unseres Bereiches „Programmierung/Entwicklung“. Ihre Aufgaben Sie entwickeln innerhalb eines kleinen Entwicklerteams eigenständig Module und Anwendungen für die Unterstützung des automatischen und manuellen Handels mit Wertpapieren und betreuen dabei die bestehende Inhouse-Software. Sie erstellen zuverlässige, performante und erweiterbare Lösungen für interne Problemstellungen in den Bereichen Handel, Backoffice, Analyse und Simulation. Dabei setzen Sie unterschiedliche Konzepte und Technologien ein, darunter Client-Server-Systeme, Netzwerkprotokolle und Datenbanken. Für die optimale Umsetzung Ihrer Aufgaben arbeiten Sie eng mit den Anwendern aus den Fachbereichen zusammen und setzen sich intensiv mit den internen Handelsabläufen auseinander. Unsere Anforderungen Ein erfolgreich abgeschlossenes Studium in einem einschlägigen Fach Sehr gute Kenntnisse in C# und .NET sowie fortgeschrittene Kenntnisse in modernem C++ und der Standardbibliothek Sicherer Umgang mit SQL-Datenbanken. Erfahrungen mit dem Entity Framework sind von Vorteil Erfahrungen mit nachrichtenorientierter Kommunikation Kreativität und Initiative bei der Erarbeitung von Lösungen für neue Probleme sowie bei der Planung von Projekten Sie verfügen über gute Deutsch- und Englischkenntnisse in Wort und Schrift Wir bieten ein leistungsgerechtes Jahreseinkommen 30 Tage Urlaubsanspruch, plus freie Tage am 24. und 31.12. Einen sicheren Arbeitsplatz Eine fundierte Einarbeitung Obst, Snacks und Erfrischungsgetränke Kostenloses Firmen-Bike (SwapFiets) Ermäßigte Urban Sports Club Mitgliedschaft Die FINOVESTA GmbH befindet sich leicht erreichbar am Düsseldorfer Hafen – eine der tollsten Gegenden dieser Stadt. Wir freuen uns über Ihre Bewerbung im PDF- Format unter: bewerbung@finovesta.de