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

Gast #1060591
Lesenswert?

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 #1060601
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren