
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
hallo dietmar, besten dank für deine mühe. das assemblerprog habe ich nun abgeändert, jetzt läuft es ca. 25mal schneller. ergibt 2685888/counter (3600*93,26*8) skaliert mit 100 v=(26859/c)*10000 r=26859 mod c was habe ich übersehen, denn das ergebnis ist falsch. mfg michael > > Hallo Michael, > > falls ich nicht zu kompliziert denke, dann bleibt Dir, wenn Du den Counter vor der Berechnung wirklich nicht skalieren und dadurch 2 Bits verlieren willst, nur übrig, eine binäre Division durchzuführen. Das hört sich schwieriger an als es ist. Außerdem muß nur der bei der Ganzzahl-Division entstehende Rest auf diese Weise verarbeitet werden. Siehe folgenden Code: > > define c word > define v word > define r word > define n byte > define i byte > > print "Berechnung von v=120384/Counter mit zwei dezimalen Nachkommastellen" > print "Bitte Counter eingeben (800..12000): "; > input c > > v=(30096/c)*400 'Ganzahl-Division ("Vorkomma-Ergebnis") > r=30096 mod c 'Rest > > n=0 'binaere Division: Rest durch Counter > for i=0 to 7 > r=r shl 1 > n=n shl 1 > if (r-c)<0 then endif > r=r-c > n=n or 1 > #endif > next i 'in n steht jetzt (r/c)*256 > > v=v+(n*100)/64+1 'das +1 behebt zwei Rundungsfehler > > print "v=";v 'ist mit 100 skaliert und auf +/- 0.015 genau > end > > Gruß, Dietmar |
| Antwort schreiben |