Wurzelziehen und Typenproblem



  • Ich mache hier eine ganz einfache Operation, aber es kommt nicht das Ergebnis raus, welches ich erwarte:

    pdMeinDouble = (sqrt((double)((x1^2) + (x2^2))))/2;

    pdMeinDouble ist ein double, x1 und x2 jeweils ein Short Integer. Rauskommen sollte sowas wie 250 oder 700, aber es kommen Werte wie 7.4342423 oder -1.#IND000 raus. Wieso? Stimmt was mit dem Casten nicht?



  • x1^2 ist ein bitweises xor aber keine Potenzierung. Dafür gibt es pow oder hier auch x1*x1.



  • x1^2 ist nicht der Potenz-Operator, nimm dazu die Funktion pow aus der cmath oder schreib x1*x1.

    Im Übrigen ist deine Konstruktion echt assig zu lesen, verteile die mal auf 3-4 Zeilen, die wird dadurch nicht langsamer...

    EDIT: da war ich wohl den Hauch langsamer

    MfG

    GPC



  • ^ ist in C++ nicht der Potenz-Operator, sondern XOR - da ist es klar, wenn du nur Müll erhälst. Probiers's mal mit

    pdMeinDouble = sqrt(x1*x1+x2*x2)/2;
    


  • Der Fehler passiert mir sowas von oft, besonders wenn ich vorher lange mit anderen Sprachen gearbeitet habe. Manchmal wünsche ich mir, dass die den blöden XOR-Operator einfach wegwerfen und einen Potenzoperator einfügen.



  • Ah, stimmt, da war mal was 😃 Ich programmiere sonst nur Delphi, da wäre es richtig gewesen. Danke!



  • Walli schrieb:

    Manchmal wünsche ich mir, dass die den blöden XOR-Operator einfach wegwerfen

    Ich hoffe, du meinst das nicht ernst, und dass der xor Operator nur ein anderer sein sollte. 😃


Anmelden zum Antworten