Tappi
08.08.2004, 18:34
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:
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:
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:
d = (x * (y Mod 10000)) / 10000
und für Division:
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?
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:
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:
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:
d = (x * (y Mod 10000)) / 10000
und für Division:
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?