Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Wieso müsste? Klappt das bei dir etwa nicht?

Der Modulo-Operator gibt immer den Restwert einer ganzzahligen Division. Daraus ergibt sich, dass das Ergebnis immer null ist, wenn eine Zahl "ganz" durch eine andere Zahl teilbar ist, da dann kein Rest bleibt.

Beispiele:

- 32 ist ganz durch 8 teilbar, das Ergebnis ist 4 Rest 0. Modulo würde also 0 liefern.

- 43 ist nicht ganz durch 8 teilbar, das Ergebnis ist 5 Rest 3. Modulo liefert also 3.

Geschrieben

Hallo,

das läßt sich aber auch deutlich effizienter lösen, in dem man prüft, ob das letzte Bit gesetzt ist. Die Modulo-Operation ist wesentlich aufwändiger als Bitoperationen.

Nic

Geschrieben

Ob das effizienter ist, kann man so pauschal nicht sagen. Das kommt ganz darauf an, was der Compiler daraus fabriziert und wozu die CPU fähig ist.

Ausserdem hättest du gleich noch dazu schreiben sollen, wie das mit bitweisen Operatoren funktioniert:

if( iEingabe & 1 ) {

    /* ungerade, nicht durch zwei teilbar */

} else {

    /* gerade, durch zwei teilbar */

}

Davon mal abgesehen, ist der Modulo-Operator flexibler, da man die Teilbarkeit mit einer beliebigen Zahl prüfen kann.

Geschrieben

Hallo,

Original geschrieben von Crow T. Robot

Davon mal abgesehen, ist der Modulo-Operator flexibler, da man die Teilbarkeit mit einer beliebigen Zahl prüfen kann.

Nach der Teilbarkeit durch eine beliebige Zahl wurde aber nicht gefragt. Man sollte für ein bestehendes Problem nach Möglichkeit immer eine effiziente Lösung suchen, die unabhängig (auch in Bezug auf die Performance) von Compiler, Betriebssystem und CPU ist. Modulo ist da ein sehr schlechtes Beispiel.

Mir ist keine CPU bekannt, auf der eine Modulo Operation schneller als eine Bit-Operation ist. Hast Du da mal ein Beispiel?

Nic

Geschrieben
Mir ist keine CPU bekannt, auf der eine Modulo Operation schneller als eine Bit-Operation ist. Hast Du da mal ein Beispiel?

Naja schneller als einfach Bitoperationen wirds kaum, aber genauso schnell schon:

Bitte schön!

Geschrieben

Hallo,

Hast Du den Artikel auch genau gelesen? Es geht hier nicht um die Abbildung der C-Modulo Funktion in Hardware, sondern um einen Instruktion, die in der Lage ist a x b + c + d in einer Instruktion zu Kodieren (und _möglicherweise_ auch in einem Zyklus auszuführen). Üblicherweise würden man mindestens zwei Instruktionen benötigen. Die Instruktion wird verwendet, um die Modulo-Artithmetik zu beschleunigen, nicht um den ganzzahligen Rest einer Division in einem Zyklus zu erzeugen. Hinzu kommt, das es in dem von Dir genannten Artikel um die Multiplikation grosser Zahlen geht (1024 Bits und nicht um die natürliche Wortlänge der CPU, also 32 oder 64 Bit), wie sie beispielsweise im Bereich der Kryptographie eingesetzt werden. Viele moderne CPUs unterstützen diese oder ähnliche Instruktionen.

Gute Compiler sind in der Lage, Modulo Berechnungen die mit zweier-Potenzen arbeiten auf die entsprechende Bit-Operation abzubilden, die komplett in Hardware abgearbeitet werden kann (man sollte sich aber nicht darauf verlassen!).

Nic

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...