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
Na. Den Wert zuerst mit 60052 multiplizieren, dann durch 59823 dividieren, als Longint, 32 bit
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
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
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.
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).
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.