Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 38

Thema: 64/32 Bit Division in AWL

  1. #11
    Lisa ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    28.05.2009
    Beiträge
    18
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Nein, ich darf leider nur mit ganzen Zahlen rechnen.
    Real ist leider nicht erlaubt.
    Geändert von Lisa (28.05.2009 um 14:21 Uhr)

  2. #12
    Registriert seit
    26.05.2009
    Beiträge
    541
    Danke
    35
    Erhielt 78 Danke für 69 Beiträge

    Standard

    hört sich nach irgendsoein Lehrerscheiß an.
    Ich würde das in eine Realzahl wandeln und dann damit rechnen.

    Aber das darfst du ja nicht.

    Poste doch mal konkrete Zahlen.
    So richtig vorstellen kann ich mir das noch nicht.

    Gruß wolder

  3. #13
    Registriert seit
    12.02.2008
    Ort
    Westfalen (Dort wo's Schwarzbrot gibt)
    Beiträge
    417
    Danke
    8
    Erhielt 87 Danke für 72 Beiträge

    Standard

    Ok, mal ein (einfaches) Beispiel. Dafür gehe ich davon aus, dass du nur mit 8Bit Werte rechnen kannst. Du sollt 64.020 durch 8 teilen.

    Aufgeteilt in High und Low (hast Du ja schon gemacht)

    kommt raus FA-14

    Im HB=250 Dez, LB=20 Dez

    250/8 = 31, Rest 2
    20 /8 = 2, Rest 4

    Dann kommt raus

    Ergebnis = (31*256)+(2*256/8 )+ (2*1)
    = 7936 + 64 +2
    = 8002

    Genauer gehts halt mit Festpunkt nicht.

  4. #14
    Lisa ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    28.05.2009
    Beiträge
    18
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Die Formel die ich verwende lautet:

    [(IN-b)*(c-d)] / (a-b) + d

    (wobei für "IN" die Grenzwerte a bzw. b sind)

    Beispiel:
    IN: 10.000.000
    a: 1.000
    b: -10.000
    c: 5.000.000
    d: 100


    Mit diesen Werten bekomme ich für den Dividenden [(IN-b)*(c-d)] :

    2d84f0ce87c0

    und für den Divisor (a-b):

    2af8



    Den Dividenden teile ich dann in den High-Teil: 2d84

    und den Low-Teil: f0ce87c0

  5. #15
    Lisa ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    28.05.2009
    Beiträge
    18
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Grubba Beitrag anzeigen
    Ok, mal ein (einfaches) Beispiel. Dafür gehe ich davon aus, dass du nur mit 8Bit Werte rechnen kannst. Du sollt 64.020 durch 8 teilen.

    Aufgeteilt in High und Low (hast Du ja schon gemacht)

    kommt raus FA-14

    Im HB=250 Dez, LB=20 Dez

    250/8 = 31, Rest 2
    20 /8 = 2, Rest 4

    Dann kommt raus

    Ergebnis = (31*256)+(2*256/8 )+ (2*1)
    = 7936 + 64 +2
    = 8002

    Genauer gehts halt mit Festpunkt nicht.


    Stimm ich dir zu, allerdings hab ich dabei noch folgendes Problem:
    Wenn der High-Teil kleiner ist, als der Divisor, bekommst Du ja 0 heraus.

    Beispiel:
    7FA

    Im HB=7 Dez, LB=250 Dez

    7/8 = 0, Rest 7
    250/8 = 31, Rest 2

    Somit würde ich ja für den High-Teil "0" als Ergebnis bekommen, obwohl die 7 theoretisch eine 700 wäre, wenn ich damit im Akku rechnen könnte.

  6. #16
    Registriert seit
    12.02.2008
    Ort
    Westfalen (Dort wo's Schwarzbrot gibt)
    Beiträge
    417
    Danke
    8
    Erhielt 87 Danke für 72 Beiträge

    Standard

    Im HB=7 Dez, LB=250 Dez

    7/8 = 0, Rest 7
    250/8 = 31, Rest 2
    Ist doch nicht schlimm. Denk daran das der Rest auch noch mit 256 multipliziert werden muss....

    (7*256 / 8 ) + 31 * 1 = (224) + 31 = 255. Besser gehts nicht.

  7. #17
    Lisa ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    28.05.2009
    Beiträge
    18
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Grubba Beitrag anzeigen
    Ist doch nicht schlimm. Denk daran das der Rest auch noch mit 256 multipliziert werden muss....

    (7*256 / 8 ) + 31 * 1 = (224) + 31 = 255. Besser gehts nicht.

    Gehe ich nun aber davon aus, dass mein Wert im High-Teil ziemlich groß ist, aber kleiner als der Divisor z.B.:

    Dividend: FBFD (Dezimal: High: 251 Low: 253)
    Divisor: FC (Dezimal: 252)


    251/252 = 0 Rest 251
    253/252 = 1 Rest 1


    Dann müsste ich ja den Rest, also 251 mit 256 multiplizieren und dann durch 8 teilen.
    Somit hätte ich dann wieder einen zu großen Wert, den ich nicht ohne Zerlegung durch 8 teilen kann, oder?
    Geändert von Lisa (28.05.2009 um 15:40 Uhr)

  8. #18
    Registriert seit
    26.05.2009
    Beiträge
    541
    Danke
    35
    Erhielt 78 Danke für 69 Beiträge

    Standard

    und für den Divisor (a-b):

    2af8

    Falsch. In deiner Formel fehlt noch +d

    Raus kommt dezimal 11100 und nicht 11000.
    Entsprechend 2B5C und nicht 2AF8.

    Aber das ist das geringste Problem.

    Wie hast du denn den Dividenden herausbekommen?!
    Mit dem Calculator von Windoof?!
    Mit der S7 hast du das bestimmt nicht geschafft. Die kann so große Zahlen nicht als Long bzw. Dint verarbeiten.
    Und ja, du hast recht. Wenn du eine Kommazahl bei einer Division herausbekommst, dann wird die Zahl hinterm Komma gelöscht.

    Aber du könntest das HB vorher mit 10 multiplizieren, bevor du es dividierst. Somit hättest du eine Kommastelle....

    gruß wolder

  9. #19
    Lisa ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    28.05.2009
    Beiträge
    18
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von wolder Beitrag anzeigen
    und für den Divisor (a-b):

    2af8

    Falsch. In deiner Formel fehlt noch +d

    Raus kommt dezimal 11100 und nicht 11000.
    Entsprechend 2B5C und nicht 2AF8.

    Aber das ist das geringste Problem.

    Wie hast du denn den Dividenden herausbekommen?!
    Mit dem Calculator von Windoof?!
    Mit der S7 hast du das bestimmt nicht geschafft. Die kann so große Zahlen nicht als Long bzw. Dint verarbeiten.
    Und ja, du hast recht. Wenn du eine Kommazahl bei einer Division herausbekommst, dann wird die Zahl hinterm Komma gelöscht.

    Aber du könntest das HB vorher mit 10 multiplizieren, bevor du es dividierst. Somit hättest du eine Kommastelle....

    gruß wolder

    Mir geht es momentan nur um die Division, die Addition von "d" erfolgt erst nach der Division, d ist also für die Division nicht relevant.

    Den Dividenden habe ich rausbekommen, indem ich (IN-b) sowie (c-d)
    jeweils in zwei 16 Bit Zahlen (Low und High- Teil) geteilt habe und dann die einzelnen Wörter miteinander multipliziert habe.
    Anschließend habe ich die Ergebnisse der Multiplikation durch Addition zu zwei DINT -Zahlen (wiederrum Low und High) zusammengefügt.

  10. #20
    Registriert seit
    12.02.2008
    Ort
    Westfalen (Dort wo's Schwarzbrot gibt)
    Beiträge
    417
    Danke
    8
    Erhielt 87 Danke für 72 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren

    Dividend: FBFD (Dezimal: High: 251 Low: 253)
    Divisor: FC (Dezimal: 252)


    251/252 = 0 Rest 251
    253/252 = 1 Rest 1
    Wo ist der Unterschied?

    (251 * 256 / 252) + 1 = 254 +1 = 255 (Soll 255,9 )

    Die Ungenauigkeit von 0.98 bekommst Du halt nicht weg. Da beißt die Maus keinen Faden ab. Es sei denn, Du prüfst das erste Ergebnis(251 * 256 / 252) auch noch mal auf den Rest ab. Dann kannst Du bei Bedarf auch noch ab oder aufrunden. Das Prinzip bleibt doch aber immer gleich. Natürlich musst Du aber Deine Dividierhäppchen so klein wählen, das sie nicht größer sind als die Hälfte Deines Rechenregisters. In Deinem Falle wären die Hälfte also 16 Bit.

    Es muss ja auf jeden Fall noch die Multiplikation von 2-8Bit Werten reinpassen.

Ähnliche Themen

  1. SCL Division mit Rest
    Von vollmi im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 05.06.2009, 15:41
  2. Division von INT Zahlen
    Von HonestAnnie im Forum Simatic
    Antworten: 58
    Letzter Beitrag: 16.07.2008, 23:31
  3. Division von DInt
    Von godi im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 07.01.2006, 08:10
  4. Genauest mögliche Division zweier Zahlen
    Von Anonymous im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 16.04.2005, 09:53
  5. Division durch null
    Von kpeter im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 08.02.2005, 18:48

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •