- 12V Akku mit 280 Ah bauen         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Rätsel um eine Berechnung

  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674

    Rätsel um eine Berechnung

    Anzeige

    Praxistest und DIY Projekte
    Hallo leute,

    kann mir einer erklären, warum folgende Rechnung als Ergebniss 18 liefert?

    $baud = 19200
    Const Konstante = 332400
    Dim A As Word
    Dim B As Word
    A = 261
    B = Konstante / A
    Print B
    End
    Es hat was damit zu tun, dass A eine eine Variable ist, setze ich direkt 261 ein, klappt es.

    Wie kriege ich das Problem gelöst?

    Danke schonmal für alle Mühen im Voraus.

    MFG Moritz

  2. #2
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    71
    Beiträge
    13.075
    Sind die Rechenoperationen für Größen über 2 byte vorgesehen?

    18 geht ja als Ergebnis von (332400 mod 2^16) / 216
    Manfred

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Erwischt... Keine Ahnung...
    Aber wenn ich einfach:
    B = 332400/261 rechne, klappt es!
    Oder was meisntest du?

    MFG Moritz

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.11.2004
    Ort
    Hvalstad, Norwegen
    Beiträge
    140
    Könnte es sein, dass Du mit Deinem Datentyp 'word' einen cast vornimmst, das heißt die Rechenoperation nur im 2 Byte-Bereich abläuft? Versuchs mal mit'nem 'long int' falls es so was in Basic gibt. Kenn mich nur mit C aus.

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    @ Manf:
    Was genau meint mod?

    @lorcan:
    Ich glaube Basic (Bascom) verfügt nur über:
    Bit
    Byte
    Word
    Integer
    Single

    Und jetzt kommts, wenn ich B als Single declariere, dann klappts!
    Das versteh mal einer:

    Dim B as Word
    B = 332400 / 261
    klappt!

    Dim B as Word
    B = 332400 / A 'A = 261 (Word)
    klappt nicht!

    Dim B as Single
    B = 332400 / A 'A = 261 (Word)
    klappt!

    Das verstehe ich echt nicht, wenn ich direkt Zahlen einsetzte ist es egal, wie groß die sind. Wenn A ein Word es klappt es dann nicht, außer wenn B ein Single ist.

    Jetzt hab ich nen super Ergebniss:
    1273.562110341

    So genau wollte ich es nicht wissen, klaut mir auch eigenlich zuviel Speicher, dieses Single!

    MFG Moritz

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2004
    Ort
    durmersheim international
    Alter
    64
    Beiträge
    159
    hi,
    Bascom kennt auch die long-typen (4byte), damit sollte es gehen und knabbert nicht so mörderisch am speicher ab.
    grüssens, harry
    der kopf ist rund damit das denken seine richtung ändern kann...

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Wunderbar! Damit klappts auch.
    Also ich hatte schon öfter probleme mit den Variablengrößen:
    Bit = Klar
    nibble gibts nicht, oder?
    byte = 8 Bit > 0 - 255
    Word = 16 Bit > 0 -65535
    Integer = 16 Bit > -32767 - 32767
    longinteger gibts nicht, oder?
    long = 32 Bit > 0 - 4.294.967.296 (auch bekannt als double word, oder?)
    single = ? > ?

    Danke nochmal! Aber verstehen tue ich es immer noch nicht.

    MFG Moritz

  8. #8
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    71
    Beiträge
    13.075
    @ Manf: Was genau meint mod?
    Die Schreibweise ist vielleicht auch schon ein Opfer der Rechtschreibreform.
    Die mathematische, nicht programmtechnische Schreibweise von Modulo.
    http://de.wikipedia.org/wiki/Kongruenz_(Zahlentheorie)
    Manfred

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Die Schreibweise ist vielleicht auch schon ein Opfer der Rechtschreibreform.
    Was soll das nun wieder heißen?

    Mod war mir aus Delphi bekannt, na eher wieder unbekannt. Aber warum sollte Bascom so einen Aufwand machen? ODer willst du damit sagen, dass damit nur die oberen Bits über 2^16 wegfallen und der Rest durch 216 geteilt wird?

    Ja das wolltest du sagen, hab grade mal nachgerechnet.
    Gibt dann in soweit auch Sinn!

    Ich verstehe nur nicht, warum dann

    B[Word] = 332400/261

    funktioniert.

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2004
    Ort
    durmersheim international
    Alter
    64
    Beiträge
    159
    hi,
    bin ich auch schon öfters drübergestolpert und komm zu dem schluss, dass bei jeder rechenoperation mit variablen der zieltyp so gross sein muss, dass er jeden operanten aufnehmen könnte.
    vielleicht machts Bascom ja so:
    kopiere KONSTANTE in VARIABLE_B und teile dann B durch A, dann wäre zumindest nachvollziehbar warum dem so ist.
    grüssens, harry
    der kopf ist rund damit das denken seine richtung ändern kann...

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

12V Akku bauen