Ankündigung

Einklappen
Keine Ankündigung bisher.

C++

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    C++

    Hi,

    lerne gerad mehr oder weniger C++ und hab ein paar Anfängerfragen, die Sprache ist ja doch ziemlich mächtig (und hart :-()

    1. hab ne gui (wxwidgets) gemacht die daten aus nem textfield ausliest, und zwar benutze ich folgendes commando:

    double r,K,T,sigma,s;
    TextCtrl1->GetValue().ToDouble(&s);

    dieser command weist s den double value vom textfeld textctrl1 zu.

    wtf!!! warum ist das so? durch das & wird auf die mem adress von s zugegriffen die von "double s" frei gesetzt wurde (oder?). warum brauche ich das "&"? und zweitens ToDouble ist in der api mit leerem command angegeben, d.h. ToDouble()! Trotzdem funktioniert dieser command hier. warum?

    #2
    2. ok ich hatte nen algo geschrieben aber kann den irgendwo nicht posten hier.

    hier: http://pastebin.com/s5Lr0mXC

    für 10.000 simulations und 1.000 steps braucht der algo 0.4s. ein vorteil von c++ ist ja, dass man mit pointern etc. arbeiten kann. kann man hier im algo was verbessern? kopiere ich irgendwo unnötigen objekte hin- und her?

    Kommentar


      #3
      Ich persönlich würde die Deklaration der Doublevariablen "double temp_val=s,delta_val=1;" und "double random_val = distribution(generator);" aus den for-Schleifen rausnehmen.
      Bin auch der Meinung, dass für den Schnipsel, den du gepostet hast keine Pointer nötig sind.

      Kommentar


        #4
        danke. bezüglich pointer geht es mir hier eher ums prinzip für größere anwendungen:

        wenn ich das richtig verstehe, funktioniert ein code wie:


        double r=1;
        euler_disc_black(r, ...)

        so, dass für die übergabe von r nach euler disc black eine kopie von r erstellt wird, falls nicht mit pointern gearbeitet wird (oder?)

        bei nem double macht das natürlich nicht soviel, aber wenn das ein 100k array ist spielt das schon ne rolle.

        Kommentar


          #5
          Da hast du vollkommen recht, abgesehen davon, dass man nie ein 100k Datenarray erstellen würde^^. Eher sollte man dann eine Liste erstellen oder ähnliches.

          Kommentar


            #6
            Wenn es sich nur um einfache Datentypen handelt reicht call by value. Andernfalls kommt es darauf an ob du die Daten direkt bearbeiten willst oder nicht. Je nachdem kommt dann call by reference oder call by pointer in Frage.

            Kommentar


              #7
              ToDouble ist in der api mit leerem command angegeben, d.h. ToDouble()! Trotzdem funktioniert dieser command hier. warum?
              das wurde glaub noch nicht beantwortet. Ich kenn die API jetzt nicht, aber ich vermute sie hat einfach mehrere methoden die ToDouble heißen, mit verschiedenen parametern und Rückgaben. die einfache ToDouble() wird dann den Rückgabewert double haben und ToDouble(double* input) wird dann keinen Rückgabewert haben (void) und stattdessen das Ergebnis an der übergebenen Speicherstelle im Speicher ablegen. Bedeutet, vermutlich könnte auch s = TextCtrl1->GetValue().ToDouble(); klappen, was für Anfänger etwas intuitiver sein könnte.

              Kommentar

              Lädt...
              X