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

Seite 4 von 4 ErsteErste ... 234
Ergebnis 31 bis 38 von 38

Thema: 64/32 Bit Division in AWL

  1. #31
    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
    Zitat Zitat von Perfektionist Beitrag anzeigen
    also, da hab ich wohl zu schnell geschrieben:
    Code:
      T_Divident_1 : WORD ; 
      T_Divident_0 : WORD ; 
      T_Quotient_1 : WORD ; 
      T_Quotient_0 : WORD ;
    das muss nicht nur zweimal, wie Du bereits richtig erkannt hast, sondern sogar viermal DWORD sein.

    mit
    Code:
          UN    #T_Zwischenergebnis
          SPB   m003
          L     DW#16#80000000
    m003: RLDA                              // ... von rechts nach links reinschieben
    wird das reinrotieren des Ergebnisbit in das Ausgaberegister vorbereitet.


    Danke, danke, danke!!!
    Jetzt funktionierts richtig!

    Hatte total vergessen Quotient_0 und Quotient_1 auch auf DWORD zu ändern.

    Aber kannst Du mir noch erklären, warum man ausgerechnet 80.000.000 laden muss, um das rotieren ins Ausgaberegister vorzubereiten?


    Liebe Grüße
    Lisa

  2. #32
    Registriert seit
    01.10.2007
    Ort
    Waiblingen
    Beiträge
    3.317
    Danke
    767
    Erhielt 536 Danke für 419 Beiträge

    Standard

    das sind 8000 0000 hex, also
    1000 0000 0000 0000 0000 0000 0000 0000 bin.
    damit wird das MSB gesetzt, das dann in das Anzeigebit reinrotiert wird.

  3. Folgender Benutzer sagt Danke zu Perfektionist für den nützlichen Beitrag:

    Lisa (18.06.2009)

  4. #33
    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

    Hallo Perfektionist,
    Deine Division funktioniert größtenteils wunderbar. Allerdings habe ich Probleme, wenn ich die Grenzwerte einsetze.
    Meiner Meinung nach müsste es eigentlich auch mit diesen Werten noch funktionieren.

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



    Ich setze folgende Grenzwerte in die Formel ein:
    IN: 2^30 -1
    a: 2^30 -1
    b: - 2^30
    c: 2^31 -1
    d: - 2^31



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


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



    Nun sollte ich als Ergebnis der Division FFFFFFFF rausbekommen, ich bekomme aber leider nur 0 raus. Erst wenn ich meinen Divisor bis auf 67F3547 verkleinere, erhalte ich wieder ein richtiges Ergebnis.


    Kannst Du mir vielleicht erklären, warum das mit den Grenzwerten nicht funktioniert?
    Geändert von Lisa (26.06.2009 um 10:30 Uhr)

  5. #34
    Registriert seit
    24.05.2006
    Beiträge
    234
    Danke
    14
    Erhielt 77 Danke für 57 Beiträge

    Standard

    Ich habe jetzt nicht jedes Detail gelesen, aber bist du dir sicher da nicht in ein Vorzeichenproblem zu rutschen mit deinem d=-2^31? Falls irgendwo noch 32-Bit Arithmetik verwendet sollte, dann knallt es.

  6. Folgender Benutzer sagt Danke zu hovonlo für den nützlichen Beitrag:

    Lisa (26.06.2009)

  7. #35
    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 hovonlo Beitrag anzeigen
    Ich habe jetzt nicht jedes Detail gelesen, aber bist du dir sicher da nicht in ein Vorzeichenproblem zu rutschen mit deinem d=-2^31? Falls irgendwo noch 32-Bit Arithmetik verwendet sollte, dann knallt es.
    Hallo,
    glaube nicht, dass ich ein Vorzeichenproblem habe.
    Bei der Differenz (c-d) reichen die 32 Bit nicht aus (zumindest nicht bei Grenzwerten). Deswegen habe ich das Ergebnis dieser Differenz auf einen Low-Teil (Word) und einen High-Teil (DINT) aufgeteilt. Somit habe ich 48Bit zur Verfügung und das muss eigentlich reichen.

    Die Ergebnisse bis zur Division sind auch noch richtig, Dividend und Divisor werden richtig übergeben. Nur bei der Division gibt es dann irgendwie Probleme.

  8. #36
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Zitat Zitat von Lisa Beitrag anzeigen
    ... Deswegen habe ich das Ergebnis dieser Differenz auf einen Low-Teil (Word) und einen High-Teil (DINT) aufgeteilt. Somit habe ich 48Bit zur Verfügung und das muss eigentlich reichen.

    Die Ergebnisse bis zur Division sind auch noch richtig, Dividend und Divisor werden richtig übergeben. Nur bei der Division gibt es dann irgendwie Probleme.
    Das ist genau das, was Hovonlo meinte ...
    Der DINT wertet das Bit 2^31 als Vorzeichen aus. Das könnte das Problem sein. Ich würde also in dem DINT vermeiden, dieses Bit zu benutzen ...
    Check das doch mal ...

    Gruß
    LL

  9. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Lisa (26.06.2009)

  10. #37
    Registriert seit
    24.05.2006
    Beiträge
    234
    Danke
    14
    Erhielt 77 Danke für 57 Beiträge

    Standard

    Nachdem ja immer wieder Probleme auftauchen mit Zahlen >=31Bit hätte ich da ein paar Routinen zum Rechen mit 64 Bit Ganzzahlen

    Es gibt Funktionen für:
    - Multiplikation 32Bit * 32Bit vorzeichenlos mit 64 Bit Result
    - Quadrat 32Bit vorzeichenlos mit 64 Bit Result
    - Addition 64Bit + 64Bit vorzeichenbehaftet mit 64Bit Result
    - Subtraktion 64Bit - 64Bit vorzeichenbehaftet mit 64Bit Result
    - Multiplikation 64Bit * 64Bit vorzeichenbehaftet mit 128Bit Result
    - Quadrat 64Bit vorzeichenbehaftet mit 128Bit Result (schneller als Multiplikation)
    - Absolutwertbildung 64Bit
    - Negierung 64Bit
    - Division 64Bit / 64Bit vorzeichenbehaftet mit 64Bit Result und Rest

    Das ganze ist selbst geschrieben und hat bisher funktioniert (Statistik-Anwendung mit Mittelwert & Standardabweichung)
    Angehängte Dateien Angehängte Dateien

  11. Folgende 3 Benutzer sagen Danke zu hovonlo für den nützlichen Beitrag:

    Grendi (25.04.2012),Lisa (26.06.2009),RONIN (22.10.2015)

  12. #38
    Registriert seit
    19.02.2010
    Beiträge
    1
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Auch von mir ein dickes Dankeschön!!!
    Zitieren Zitieren Danke an hovonlo  

Ä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
  •