www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Division mit Ergebnis kleiner 1


Autor: Schlampf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Zwölf Mal Acht (hacky)
Datum:

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

Autor: Chris L. (kingkernel)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Schlampf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: mano (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Schlampf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.