Forum: Mikrocontroller und Digitale Elektronik Division mit Ergebnis kleiner 1


von Schlampf (Gast)


Lesenswert?

Sehr geehrtes Forum,

mein Problem ist Folgendes:

Ich muss 2 Zahlen, die relativ groß sind und nahe beieinander liegen 
teilen, um einen Korrekturwert zu ermitteln.
Konkret geht es um Werte wie
zB 60052/59823=1,003827959
Damit möchte ich dann einen Wert verändern:
1625*1,003827959=1631,220434
Der Wert 1625 wurde auf 1631 verändert.

Wie realisiere ich das am besten auf einem MSP430?


Liebe Grüße,
Schlampf

von Purzel H. (hacky)


Lesenswert?

Na. Den Wert zuerst mit 60052 multiplizieren, dann durch 59823 
dividieren, als Longint, 32 bit

von Chris L. (kingkernel)


Lesenswert?

genau und damit eine unnötig belegte Speicherstelle für was anderes frei 
haben. es muss nicht immer alles in variablen zwischengespeichert 
werden. es sei denn du brauchst den wer noch irgendwie anderst

von Schlampf (Gast)


Lesenswert?

Hallo,

vielen Dank für die Antworten!

Das hört sich sehr einfach an :)
Hab es trozdem nicht so ganz verstanden ...

Wert * 60052 ist die Mult. zweier 16bit Werte, das kann der MSP430 laut 
Datenblatt ... abgespeichert wird das Erg. in 32bit.
Soweit hab ichs verstanden, aber wie läuft die Division ab?
Gibts dafür auch eine HW-Komponente?

Gruß
Schlampf

von Grrrr (Gast)


Lesenswert?

Vielleicht schreibst Du mal was eigentlich das Problem ist.

Es ist doch erstmal völlig gleichgültig ob die Division nun per Hardware 
durchgeführt wird oder nicht. Es sei denn Du hast uns eine 
Nebenbedingung nicht genannt. Und jeder Prozessor, der 
subtrahieren/addieren kann, kann auch multiplizieren. Worum geht es 
eigentlich?

Ausserdem frage ich mich wo hier, entsprechend dem Thread-Titel eine 
Division mit Ergebnis kleiner 1 auftritt.

von mano (Gast)


Lesenswert?

Schlampf schrieb:
> zB 60052/59823=1,003827959
> Damit möchte ich dann einen Wert verändern:
> 1625*1,003827959=1631,220434
> Der Wert 1

Lass den PC mal 1625 * (60052 / 59823) und  (1625 * 60052) / 59823 
rechnen und vergeich die Ergebnisse (natürlich alles ints und keine 
floats).

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ansonsten kann man natürlich, sofern ausreichend Flash-ROM vorhanden ist 
und keine zeitlichen Einschränkungen vorhanden sind, auch auf einem 
MSP430 Floating-Point-Arithmetik verwenden. Je nach Compiler auch mit 
64-Bit-Doubles.

von Schlampf (Gast)


Lesenswert?

Vielen dank für eure Antworten!


Grrrr schrieb:
> Ausserdem frage ich mich wo hier, entsprechend dem Thread-Titel eine
> Division mit Ergebnis kleiner 1 auftritt.

Das war natürlich schlecht formuliert ...
Ich meinte ein Ergebnis, das seine relevanten Stellen hinter dem Komma 
hat.
zB 1,00001 oder 0,99999.

mano schrieb:
> Lass den PC mal 1625 * (60052 / 59823) und  (1625 * 60052) / 59823
> rechnen und vergeich die Ergebnisse (natürlich alles ints und keine
> floats).

Im ersten BSP wird hinter dem Komma alles abgeschnitten und mit 1 
multipliziert (nutzlos), im 2.BSP werden zwei 16bit Werte multilplizier 
in ein 32bit Ergebnis geschrieben, das ganze dann wieder durch 16bit 
geteilt und dieses Erg. wird dann in eine 16bit Variable 
geschrieben.(richtiges Ergebnis)

Das hat mir schon sehr geholfen (auch fürs Verständnis).
Aber meine Frage wie die Division im MSP430 gemacht wird beschäftigt 
mich immernoch.
Ist es der Algorithmus "binäre Division?"

Wo kann ich mich denn schlaulesen zum Thema Division?
Könnt Ihr mir ein gutes Skript oder Buch empfehlen, das vielleicht 
speziell im Bezug auf uController dieses Thema erklärt?


Gruß,
Sclampf

von Christoph db1uq K. (christoph_kessler)


Lesenswert?


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.