Division durch 100

OP #961481
Hallo Leute,
ich muss einen Prozentwert einer etwas grösseren Zahl(19Bit) berechnen.
Wenn ich versuchen meineZahl*Prozentsatz/100 zu berechnen, dann habe ich 
eine Division durch 100. Division ist (fast) immer übel, aber gibt es 
vielleicht ein schnelle/einfache Division durch 10 oder 100?
Oder hat jemand ne ander Idee?
danke
patrik
Gast #962337
> >>SLAA329
> Das in der Appnote ist ja nun auch wieder
> Festpunkt(oder -komma)arithmetik:
>
> M = 1/41.8375 = 0.0239020018 = 0.0000011000011110b
>
> Nur steht das nicht so ausdrücklich da.

Das ternäre Hornerschema ist natürlich Festkommaarithmetik.
Hast Du Wunder erwartet?

Die Anzahl der benötigten Operationen ist allerdings recht gut.

Der OP hat es ja mal wieder unterlassen, einen Hinweis auf die
Zielarchitektur herauszurücken.

> Prozentwert einer etwas grösseren Zahl(19Bit)
Da wird ja wohl keiner extra deswegem die Float-Library dazulinken
wollen :-)
Gast #962454
> Einfach die Zahl mit 2^16/100=655 multiplizieren und die unteren 16 Bit
> wegwerfen. Fertig ist die Division durch Hundert.

Naja, zumindest wenn es nicht so ganz genau sein soll (z.B. wird es für 
einen Progress-Bar locker reichen).

Beispiel:
x = 100
x / 100 = 1
(x * 655) >> 16 = 65500 >> 16 = (int)0.99945068359 = 0
Gast #962458
>Naja, zumindest wenn es nicht so ganz genau sein soll (z.B. wird es für
>einen Progress-Bar locker reichen).

Den macht man aber in Integerarithmetik mit X * 1,28 / 128 !
#962615
Gastinformatiker wrote:
> Wieso ? Multiplikation mit 1,28 ist genau, 655 nicht.

Wieso? 1.28 ist genauso ungenau wie das Benutzen von 655, wenn man bei 
1.28 (=1.0100011110101110000101000111101b) auch nur 10 bit Genauigkeit 
benutzt.
Gast #962677
Hi Allerseits,

Um auf Falk's ursprünglichen Vorschlag zurückzukommen - der ist nämlich 
m.E. nach bisher der beste Vorschlag - aber ich würd' mehr Bits 
spendieren:
mit einem 18-Bit Multiplizier (17 Bit unsigned !) - die in den 'modernen 
devices vorhanden sind - ergibt sich mit SEHR hoher Genauigkeit:

1/100 ~ 41943/2^22 = 0.00999999

41943 = 0xA3D7 (16 Bit)

Also: mit 41943 multiplizieren und die unteren 22 Bits wegschmeißen

Gruß
Jochen
Moderator (Firma: Titel) Persönliche Seite #962715
>Prozentwert einer etwas grösseren Zahl(19Bit)
passt nicht in einen
>18-Bit Multiplizier (17 Bit unsigned !)

Wieso brauche ich für einen Prozentwert eigentlich 17 oder 18 Bit?
Na gut, der Funktionsblock ist eben so groß...

>die unteren 22 Bits wegschmeißen...
Wir leben in einer Wegwerfgesellschaft.
Für 100% reichen aber doch 7 Bits, da könnte ich noch viel genauer 
rechnen und wesentlich mehr wegschmeissen
(34 Bits - 7 Bits = 27 Bits  ;-)

Finde ich übrigens interessant,
dass Patrick (OP) sich gar nicht mehr meldet  :(
Gast #962723
8 Bits sollten es schon sein, da die Genauigkeit vor der Rundung eine 
Dezimalstelle besser sein muss (im Binärsystem Faktor 2).

100% erfordern 0,5% -> Auflösung = 200! -> 8 Bit.

Man kann es aber bedenkenlos größer formulieren - die Synthese wirft das 
unbenutzte weg.

Wenn aber die 100% auf 0,1 angegeben werden müssen, braucht s 
logischerweise 3 Bit mehr.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.