Wie kann man testen ob sich eine Zahl(Gleitkomma) veraendert?
-
Hi, ich stehe vor dem folgendem Problem:
Ich habe hier einen Float Zahl, bei dem ich gerne permanent testen moechte ob er sich veraendert. Der Wert der Zahl veraendert sich dynamisch und variiert zwischen 5000.00 bis 10000.00. Dann kommt es manchmal vor, dass ich der Wert sich nicht aendert und bei einem bestimmten Wert "einfriert", der zufaellig ist. Jetzt moechte ich aber gerne, dass, wenn der Wert einfriert, ein printf(), also eine Meldung geworfen wird.
Gibt es eine Moeglichkeit, zu testen ob sich ein Wert einer Zahl veraendert? Wenn die Zahl nur ein paar feste Werte annehmen kann, dann waere das ja kein Problem, aber es sind hier Werte zwischen 5000.00 und 10000.00...
Jemand vielleicht eine Ahnung ob man sowas ueberhaupt testen kann?
-
Du kannst doch einfach immer den letzten Zustand sichern und dann mit dem aktuellen vergleichen (wenn zahl vor 100ms 1 war und jetzt 2 ist, dann hat sie sich höchstwahrscheinlich geändert
).
-
Ich verstehe das Problem nicht ganz. Meinst du ungefähr sowas:
float get_current_value(); void pruefen() { static float last_value = 0; float current_value = get_current_value(); if (current_value != last_value) { printf("Changed from %f to %f\n", last_value, current_value); last_value = current_value; } } int main() { while (1) { pruefen(); } }
-
Übrigens wäre es - anders als du annimmst - beim Vergleich mit festen Werten noch ein wenig komplizierter, als einfach nur auf Änderung zu prüfen. Da müsstest du je nachdem nämlich noch Rundungsungenauigkeiten bedenken (da kann man die Differenz auf eine maximale Abweichung prüfen).
-
speichern des letzten wertes ist eine gute idee! aber wie sieht es mit der performance aus, wenn ich immer wieder einen temporaeren wert speichere und vergleiche. warhscheinlich muesste ich einen genuegend grossen zeitrahmen waehlen, damit die performance nicht leidet. der code gibt mir schon mal eine richtung vor, wie es aussehen koennte.
ich werds mal ausprobieren. danke fuer die tipps
!
-
Die Performance leidet nicht, wenn du die Prüfung in einen eigenen Thread packst und in der Schleife sowas wie ein Sleep einbaust (aber damit verlassen wir Standard-C, ich weiß ja nicht, in welcher Umgebung du genau arbeitest).
-
_matze schrieb:
Die Performance leidet nicht, wenn du die Prüfung in einen eigenen Thread packst...
meinste dass man threads so nebenbei laufen lassen kann, ohne dass es auffällt? *fg*
-
;fricky schrieb:
_matze schrieb:
Die Performance leidet nicht, wenn du die Prüfung in einen eigenen Thread packst...
meinste dass man threads so nebenbei laufen lassen kann, ohne dass es auffällt? *fg*
Ich meine, dass eine Dauer-Prüf-Schleife deutlich weniger CPU-Last verursacht, wenn sie mit einem Delay wie Sleep() in einem eigenen Thread läuft.
-
_matze schrieb:
;fricky schrieb:
_matze schrieb:
Die Performance leidet nicht, wenn du die Prüfung in einen eigenen Thread packst...
meinste dass man threads so nebenbei laufen lassen kann, ohne dass es auffällt? *fg*
Ich meine, dass eine Dauer-Prüf-Schleife deutlich weniger CPU-Last verursacht, wenn sie mit einem Delay wie Sleep() in einem eigenen Thread läuft.
aber du schriebst 'performance', nicht 'cpu-last', na egal...