Hallo an alle Eher eine allgemeine C-Frage: Ich bin derzeit dabei, mir einen Codeschnipsel anzusehen. Dabei bin ich auf eine Zuweisung gestossen, die ich überhaupt nicht interpretieren kann: Wert_X = Wert_Y * +Wert_Z Was macht diese Zuweisung? Konkret geht es um die Bedeutung des "+". Ich habe erst vermutet, dass dies eine Funktion zur Absolutwertbildung vom Wert_Z ist. Dafür würde ich dann jedoch wohl "abs()" nehmen. Da ich absolut keinen Anhaltspunkt habe, ist es natürlich auch schwer, bei google was zu finden. Auch in meinen einschlägigen Büchern habe ich nichts gefunden. Dank euch für eure Hilfe.
Hm... wären es zwei ++ würds heissen, dass x = y * z gerechnet wird, zuvor jedoch z um eins erhöht wird. Aber so... bleibt nur die schätzung, dass das + überflüssig ist bzw. ignoriert wird.
Jaecko wrote: > Aber so... bleibt nur die schätzung, > dass das + überflüssig ist bzw. ignoriert wird. Ja, es ist gewissermaßen ein positives Vorzeichen. Das dürfte lediglich aus Symmetriegründen zu:
1 | Wert_X = Wert_Y * -Wert_Z; |
syntaktisch zulässig sein.
Werfe einen C-Compiler deiner Wahl an und schaue was bei rauskommt:
1 | int Wert_X = 0, Wert_Y = 2, Wert_Z = 0; |
2 | |
3 | for ( Wert_Z=0; Wert_Z<=10; Wert_Z++ ){ |
4 | Wert_X = Wert_Y * +Wert_Z; |
5 | |
6 | printf("Wert_X = %5d Wert_Y = %5d Wert_Z = %5d\n",Wert_X,Wert_Y,Wert_Z); |
7 | }
|
So... Hatte nun die Möglichkeit, das oben beschriebene kurze C-Programm auf einem Rechner auszuführen. Es ist tatsächlich so, dass das "+" einfach weggelassen werden kann. Es hat keinerlei Einfluss. Die Berechnung ist ein Teil eines Kalman-Filter-Programms. Als wär es nicht schon schwer genug, überhaupt mal ansatzweise die Theorie des Filters zu verstehen. Nein ... da mus dem geneigten Leser das Leben auch noch mit einem solchen, nicht nachvollziehbaren Code unnötig erschwert werden... Danke für eure Hilfe
Was passiert in C, wenn Was wird (+Wert_Z) wenn Wert_Z negativ ist? Was wird (Wert_Z) wenn Wert_Z negativ ist? Wenn ich mich ganz stark irre hat man diese Form in Pascal benutzt, um eventuell negativ werdende Werte von WertZ ins positive zu wandeln.
Hallo ihr Ich hab das obige kurze C-Programm nochmals mit unterschiedlichen Parametern laufen lassen (Wert_Z mal negativ, mal positiv usw.). Ergebnis immer so, als wenn das "+" nicht vorhanden wäre. Im nächsten Schritt habe ich mir gedacht, dass das "+" u.U. durch den gcc auf meinem PC wegoptimiert wird. Hab daraus hin das Programm einmal mit -o0, einmal mit -o5 und einmal mit -os kompiliert. Auch die drei unterschiedlichen Optimierungsstufen brachten keine Änderung. @ tex Mit der Wandlung ins positive sprichst du die auch von mir vermutete Absolutwertbildung an. @ Jörg Bug in der Quelle ist natürlich nicht auszuschließen. Wie gesagt, diese Zeile kommt aus der Kalman-Filterberechnung. Genauer aus dem Mikrokopter-Board. Der Kopter des Urhebers des Codes fliegt jedenfalls ;-) Leider ist der Beitrag zu alt, so dass keiner mir mehr auf die Frage antworten kann. Ich werde jetzt folgendes tun: Ich hatte sowieso vor, den Kalman-Filter in Labview nachzubilden. Hat den Vorteil für mich, dass ich meine realen Messwerte von ACC- und Gyro-Sensor einlesen kann und graphisch anzeigen lassen kann. Zusätzlich kann ich da schön mit Einstellparametern spielen etc. etc. Die Zeilen mit der fraglichen Berechnung werde ich als C-Code mit im Labview einbinden. So werd ich dann wohl beurteilen können, ob das "+" einen Einfluss hat oder nicht. Verspreche euch, das Ergebnis hier mitzuteilen. Danke soweit Ganz schön viel Arbeit für so eine einfache Berechnung :-)
MarcusW wrote: > Genauer aus dem > Mikrokopter-Board. Der Kopter des Urhebers des Codes fliegt jedenfalls > ;-) Ist halt die Frage, ob das Ding eben immer noch fliegt, wenn man ein + mit einem ++ verwechselt.
Jörg Wunsch wrote: > Ist halt die Frage, ob das Ding eben immer noch fliegt, wenn man ein > + mit einem ++ verwechselt. Ist doch gestern in Mittelmeer gestürzt.
tex wrote: > Was wird (+Wert_Z) wenn Wert_Z negativ ist? Wert_Z. > Was wird (Wert_Z) wenn Wert_Z negativ ist? Wert_Z.
1 | #include <stdio.h> |
2 | |
3 | int main() { |
4 | int i; |
5 | |
6 | for (i = -5; i <= 5; i++) { |
7 | printf("(-i) = %3i, (i) = %3i\n", (+i), (i)); |
8 | }
|
9 | }
|
ergibt
1 | (-i) = -5, (i) = -5 |
2 | (-i) = -4, (i) = -4 |
3 | (-i) = -3, (i) = -3 |
4 | (-i) = -2, (i) = -2 |
5 | (-i) = -1, (i) = -1 |
6 | (-i) = 0, (i) = 0 |
7 | (-i) = 1, (i) = 1 |
8 | (-i) = 2, (i) = 2 |
9 | (-i) = 3, (i) = 3 |
10 | (-i) = 4, (i) = 4 |
11 | (-i) = 5, (i) = 5 |
> Wenn ich mich ganz stark irre hat man diese Form in Pascal benutzt, um > eventuell negativ werdende Werte von WertZ ins positive zu wandeln. Nö. Lässt sich auch da quasi als "(+1) *" umschreiben. Wird dort sogar explizit als "Unärer Operator für Identität" festgelegt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.