![]() |
Div 2 durch Subtraktion
Hey,
Eine Zahl mit zwei zu multiplizieren, ohne die Multiplikation zu verwenden ist ja kein Problem, ich addiere die Zahl einfach zu sich selbst, geht dass auch für die Division durch 2? Gibt es auch eine Möglichkeit eine gerade Zahl zu halbieren, ohne die Division zu verwenden? |
Re: Div 2 durch Subtraktion
das könnte man mit shifts machen:
Delphi-Quellcode:
oder allgemein
var Zahl, ZahlDiv2: Integer;
begin Zahl := 1024; ZahlDiv2 := Zahl shr 1; //ZahlDiv2 = 512 end;
Code:
wenn ich mich nicht irre ;)
Zahl div 2^k = Zahl shr k
wobei ich denke dass der Delphi-kompiler aus einem div 2 eh ein shr 1 machen wird. edit: für multiplikation geht das übrigens auch:
Code:
Zahl * 2^k = Zahl shl k
|
Re: Div 2 durch Subtraktion
Hallo,
Zitat:
|
Re: Div 2 durch Subtraktion
Nunja,
![]() ![]() Du könntest solange von der Zahl 1 abziehen, bis das Ergebnis mal zwei kleiner oder gleich der Ausgangszahl ist:
Delphi-Quellcode:
[Edit]Habs in ne Funktion gepackt
function DividebySubtraction(n:Integer);
Begin Result:=n; while (Result+Result)>n do Dec(Result); End; Aber was für einen Sinn soll das haben? |
Re: Div 2 durch Subtraktion
Die Lösung mit SHR funktioniert aber nur für positive Zahlen. :wink:
Gruß Hawkeye |
Re: Div 2 durch Subtraktion
Dann bauen wir uns eine Funktion SignedSHR die wie folgt aussieht ;)
Delphi-Quellcode:
function SignedSHR(Number, By: Integer): Integer;
asm sar eax, edx end; |
Re: Div 2 durch Subtraktion
Zitat:
Der Algorithmus ist gut. Zum Sinn: Ich wollte die Multiplikation von zwei natürlichen Zahlen nur mit Addition und Subtraktion durchführen, da diese maschinentechnisch gesehen leichter zu verstehen sind; ganz im Gegensatz zur Multiplikation und Division. Mein Algorithmus zur Multiplikation benötigt aber an zwei Stellen die Division durch 2 und ich wusste nicht, wie ich die umsetzen kann; jetzt weiß ich es. Danke. Edit: Wie funktioniert dieses shr denn? Irgendwie über Verschiebung? Edit2: Achja, ich muss Binär ja nur die erste Stelle weglasse... Edit3: Achwas, ich bin bescheuert, vergesst Edit2 bitte. |
Re: Div 2 durch Subtraktion
Aber vorsicht, es wird immer abgerundet!
|
Re: Div 2 durch Subtraktion
Soweit ich weiß kann man jede Mathematische Operation auf die Addition zurückführen (auch logarithmus).
Mein DVT Lehrer hat ein altes Buch wo das drinne Beschrieben is, aber ich selbst hab da leider keine Ahnung von. Geh doch mal in eine Bibliothek. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz