AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Div 2 durch Subtraktion

Ein Thema von TheAn00bis · begonnen am 24. Apr 2006 · letzter Beitrag vom 24. Apr 2006
Antwort Antwort
TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#1

Div 2 durch Subtraktion

  Alt 24. Apr 2006, 20:55
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?
  Mit Zitat antworten Zitat
Benutzerbild von BlackJack
BlackJack

Registriert seit: 2. Jul 2005
Ort: Coesfeld
246 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Div 2 durch Subtraktion

  Alt 24. Apr 2006, 21:00
das könnte man mit shifts machen:

Delphi-Quellcode:
var Zahl, ZahlDiv2: Integer;
begin
Zahl := 1024;
ZahlDiv2 := Zahl shr 1; //ZahlDiv2 = 512
end;
oder allgemein

Code:
Zahl div 2^k = Zahl shr k
wenn ich mich nicht irre

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
See my shadow changing, stretching up and over me.
Soften this old armor. Hoping I can clear the way
By stepping through my shadow, coming out the other side.
Step into the shadow. Forty six and two are just ahead of me.
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#3

Re: Div 2 durch Subtraktion

  Alt 24. Apr 2006, 21:01
Hallo,

Zitat von TheAn00bis:
[...]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?
mit 0,5 multiplizieren.... öhm - zu hoch für mich ^^
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Div 2 durch Subtraktion

  Alt 24. Apr 2006, 21:01
Nunja, Delphi-Referenz durchsuchenshl(x:=x shl 1;//x wird verdoppelt) bzw. Delphi-Referenz durchsuchenshr(x:=x shr 1;//x wird halbiert) machen das, aber ich glaube das meinst du nicht.
Du könntest solange von der Zahl 1 abziehen, bis das Ergebnis mal zwei kleiner oder gleich der Ausgangszahl ist:
Delphi-Quellcode:
function DividebySubtraction(n:Integer);
Begin
  Result:=n;
  while (Result+Result)>n do
    Dec(Result);
End;
[Edit]Habs in ne Funktion gepackt
Aber was für einen Sinn soll das haben?
Benjamin
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Div 2 durch Subtraktion

  Alt 24. Apr 2006, 21:06
Die Lösung mit SHR funktioniert aber nur für positive Zahlen.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#6

Re: Div 2 durch Subtraktion

  Alt 24. Apr 2006, 21:08
Dann bauen wir uns eine Funktion SignedSHR die wie folgt aussieht
Delphi-Quellcode:
function SignedSHR(Number, By: Integer): Integer;
asm
  sar eax, edx
end;
  Mit Zitat antworten Zitat
TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#7

Re: Div 2 durch Subtraktion

  Alt 24. Apr 2006, 21:09
Zitat von BenjaminH:
Nunja, Delphi-Referenz durchsuchenshl(x:=x shl 1;//x wird verdoppelt) bzw. Delphi-Referenz durchsuchenshr(x:=x shr 1;//x wird halbiert) machen das, aber ich glaube das meinst du nicht.
Du könntest solange von der Zahl 1 abziehen, bis das Ergebnis mal zwei kleiner oder gleich der Ausgangszahl ist:
Delphi-Quellcode:
function DividebySubtraction(n:Integer);
Begin
  Result:=n;
  while (Result+Result)>n do
    Dec(Result);
End;
[Edit]Habs in ne Funktion gepackt
Aber was für einen Sinn soll das haben?
Danke!

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.
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Div 2 durch Subtraktion

  Alt 24. Apr 2006, 21:10
Aber vorsicht, es wird immer abgerundet!
Benjamin
  Mit Zitat antworten Zitat
kleiner Unwissender

Registriert seit: 24. Jul 2005
Ort: Rostock
188 Beiträge
 
Delphi 6 Personal
 
#9

Re: Div 2 durch Subtraktion

  Alt 24. Apr 2006, 21:29
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.
never change a running system
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz