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:
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
intmain(){
4
inti;
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.