-         
+ Antworten
Ergebnis 1 bis 3 von 3

Thema: Fließkommazahlen in CCI implementieren

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.06.2004
    Ort
    Düsseldorf
    Alter
    32
    Beiträge
    158

    Fließkommazahlen in CCI implementieren

    Hallo,

    ich will für die C-Control I ein paar Funktionen schreiben, die das Hantieren mit Fließkommazahlen ermöglichen.

    Zum Aufbau: Die C-Control ist ein 8 Bit Mikrocontroller, kann aber einfach mit Integer Werten hantieren.

    Ich habe festgelegt, dass eine Fließkommazahl ein Integer Wert ist:

    0,1 > 01000
    2,0 > 20000
    1,5 > 15000
    0,0003 > 00003

    Plus und Minut kann man damit wunderbar rechnen. Als Print Ausgabe nutze ich folgende Routine:

    Code:
    define dummy as word
    define dummy2 as word
    define dummy3 as word
    
    function print_single(x ref dummy)
      print (x/10000) & "." & (x mod 10000)
    end function
    Das läuft auch wunderbar. Natürlich kann ich keine Negativen Werte darstellen, das ist aber egal.

    Jetzt arbeite ich an eine Methode um multiplizieren und dividieren zu können:

    Code:
    function mul_singe(x ref dummy, y ref dummy2)
    
      dummy3 = (...)
      
      return dummy3
    end function
    
    
    function div_singe(x ref dummy, y ref dummy2)
    
      dummy3 = (...)
      
      return dummy3
    end function
    ... Soweit so gut.

    In Visual Basic funktioniert folgender Code für Multiplikation:

    Code:
    d = (x * (y Mod 10000)) / 10000
    und für Division:

    Code:
    d = ((y Mod 10000) / x) * 10000
    (Fragt mich nicht mehr wie ich drauf gekommen bin ... ist schon was länger her).

    Leider geht das auf der C-Control nicht, da immer abrundet:

    5000 / 10000 = 0 u.s.w.

    Kennt jemand einen alternativen Code?

  2. #2
    1. das sind keine fließkommerzahlen, sondern festkommerzahlen, da das kommer ja an einer bestimmten stelle ist.
    2. probiers mal mit brüchen! fur eine zahl brauchst du zb ein 16 bit wort. die ersten 8bit sind der zähler, die zweiten der nenner.
    wenn du nun eine zahl mit einer anderen multiplizieren willst rechnest du zähler mal zähler und nenner mal nenner. zum diviedieren nenner mal zähler und zähler mal nenner.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.06.2004
    Ort
    Düsseldorf
    Alter
    32
    Beiträge
    158
    Zitat Zitat von apfelgriepsch
    1. das sind keine fließkommerzahlen, sondern festkommerzahlen, da das kommer ja an einer bestimmten stelle ist.

    Ja ich weiß; das war ein "Tippfehler".

    Zitat Zitat von apfelgriepsch
    2. probiers mal mit brüchen! fur eine zahl brauchst du zb ein 16 bit wort. die ersten 8bit sind der zähler, die zweiten der nenner.
    wenn du nun eine zahl mit einer anderen multiplizieren willst rechnest du zähler mal zähler und nenner mal nenner. zum diviedieren nenner mal zähler und zähler mal nenner.
    Ich habe eine deutlich trivialere Lösung gefunden (siehe www.fdos.de/ccbpp), obwohl Dein Gedanke sehr gut ist. Aber Danke ;o)
    http://www.tappertzhofen.eu/bpp2

    Basic++ Programmiersprache
    für den C-Control I Mikrocontroller

+ Antworten

Berechtigungen

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