Forum: Mikrocontroller und Digitale Elektronik unsigned int mit float multiplizieren


von Tobias (Gast)


Lesenswert?

Hallo,

könnte mir jemand bitte sagen ob folgende Code-Zeile so funktionieren 
könnte.

Schwelle = (u16)((Sum_mittel * Faktor) + Offset);

Sum_mittel ist unsigned int (16-Bit)
Faktor und Offset ist float
Schwelle ist wieder unsigned int (16-Bit)

Faktor und Offset sind immer positiv.

Danke, Gruß Tobias

von Volker Z. (vza)


Lesenswert?

Hallo
klare Antwort Jain.

Je nach Wertebereich Deiner Variablen wird es Funktionieren oder nicht.

ciao

von Oliver (Gast)


Lesenswert?

Klare Antwort Ja.

Der Code ist syntaktisch richtiger C-Code, und wird damit immer genau 
das machen, was der C-Standard dafür vorschreibt (wenn der verwendetet 
Compiler keine Macke hat).

Ob das, was nach C-Standard da passieren soll, auch das ist, was du dir 
vorstellst, ist eine andere Frage.

Oliver

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Je nach Wertebereich Deiner Variablen wird es Funktionieren oder nicht.
Nimm zum Beispiel einfach mal für Faktor den Wert 0.0001 und für Offset 
den Wert -234567.89 und schon funktionierts nicht mehr... :-/

von Tobias (Gast)


Lesenswert?

Wie gesagt, Faktor und Offset sind immer POSITIV. Ein Überlauf von 
Schwelle ist auch ausgeschlossen.
Mich interessiert mehr ob das mit dem Umwandeln von einer 
vorzeichenbehafteten Zahl in eine vorzeichenlose Zahl so passt.

von Gast1 (Gast)


Lesenswert?

> und für Offset den Wert -234567.89
passt eh nicht zu
> Faktor und Offset sind immer positiv.

von Volker Z. (vza)


Lesenswert?

Wie gesagt:
Der Syntax ist korrekt.
Aber ob du damit glücklich wirst hängt vom Wertebereich und der 
geforderten Auflösung ab.
Du must sicherstellen das kein Über/Unterlauf passiert und noch genug 
Auflösung bleibt.
Kommen Faktor und Offset von einer Kalibrierung, kann man davon ausgehen 
das es Past. Sind das Handeingaben, würde ich auf jedenfall auf den 
zulässigen Bereich prüfen.

ciao Volker

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
Noch kein Account? Hier anmelden.