Was macht "x = y * +z" (C-Progr.)

Gast #1060591
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.
Gast #1060593
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.
Gast #1060601
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
  }
Gast #1060994
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
Gast #1061647
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.
Gast #1061697
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 :-)
Gast #1062047
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.