4_5 Mul4

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

4_5 Mul4
Ich sitze grad wieder an der mul4. Aktuell spalte ich x und y mit den extractlowerbits und extracthigherbits methoden, multipliziere mit 4 Rekursiven aufrufen und dann combine ich das low,mid und up . Leider kommt bei 34 = 544 statt 34 = 12 raus. Hat jemand das noch so gemacht und weiß wo mein Fehler liegen könnte?


Bist du sicher, dass du die beiden Zahlen an der richtigen Stelle aufspaltest? Du musst auf jeden Fall beide von den kleineren Bits anfangend mit der gleichen Anzahl aufspalten.


Ich teile x und y mit rechts shift durch 2 (also halbieren). Dann schaue ich welches davon größer ist und nehme das für meine lowerbits (Wert z). Dann extracte ich die higher bits mit lower = z. Bei lowerbits nehme ich dann die gesamt länge von x,y und ziehe z davon ab. Sprich (count(x oder y)-z)


Also entweder habe ich das jetzt falsch verstanden oder ich mache das anders. Ich zähle zuerst die Bits der beiden Zahlen und nehme dann die größere Anzahl davon und teile sie durch zwei. In manchen Fällen muss ich eins dazu addieren. Diese Anzahl benutze ich zum Trennen der lower bits.


Wenn ich versuche das so umzusetzen, dann bekomme ich einen Timeout.

Ich bekomme dann 96 als Dezimalzahl raus.


Ich habe meine Code nochmal neugeschrieben. Leider geht jetzt nur die Multiplikation von 42 und 23 nicht durch. Die Länge der Ausgegeben Zahl ist allerdings richtig.

Expected: 1111 0001 10, Actual: 1010 1111 10


Hast du schonmal versucht, die Methode mit diesen Werten zu debuggen? Auch wenns vielleicht ein bisschen dauert, solltest du so ja auf den Fehler kommen


Hast du denn mittlerweile eine Lösung gefunden? Habe nämlich das gleiche Problem :frowning:
Also dass 42 und 23 nicht geht


Bei dem Problem mit x=42 und y=23 könnte es sein, dass die Reihenfolge im Code falsch ist, nämlich wenn man zuerst beide AnzahlBits durch 2 teilt, dann überprüft, welche BitAnzahl größer ist, und dann evtl. eins dazu addiert.

Als Beispiel sei x=5 [=(101)₂] und y=2 [=(11)₂]. Also ist anzahlBitsX = 3 und anzahlBitsY = 2. Wenn man beide Zahlen durch 2 teilt, dann ist anzahlBitsX = 1 und anzahlBitsY = 1.
Wenn man nach dem dividieren erst prüft, welches anzahlBits größer ist, kann es sein, dass aus Versehen die falsche Variable gewählt wird.
Bei mir wurde dann anzahlBitsY ausgewählt, obwohl eigentlich anzahlBitsX vorher noch um 1 hätte erhöht werden müssen. Dann wäre anzahlBitsX = 2, und damit um 1 größer als anzahlBitsY.

Vielleicht ist euer Problem ja ähnlich.

1 „Gefällt mir“

Hat iwer das Problem gelöst? Hab das selbe und es war nicht eine evtl falsche Reihenfolge von vergleichen, teilen etc.


Also mein Fehler lag letztendlich in der combine Methode, obwohl der Test funktioniert hat. Vielleicht prüfst du die anderen Methoden mal mit einem eigenen Beispiel durch, ob diese auch wiklich tun, was sie sollen?


Danke für deine Hilfe so spät noch. Nach ausgiebigem Testen kann ich die combine-Methode als Fehlerquelle ausschließen…