Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi dividieren verdammt langer Zahlen (https://www.delphipraxis.net/29014-dividieren-verdammt-langer-zahlen.html)

Patrick 2. Sep 2004 17:24


dividieren verdammt langer Zahlen
 
Tach,

Also ich weis nicht, ob ihr mir helfen könnt, wahrscheinlich ist mir nicht mehr zu helfen, aber ich probiers mal..

Eines meiner neusten Projekte beschäftigt sich mit dem Berechnen sehr großer Zahlen. Die Delphi Datentypen sind längst nicht ausreichend. Also habe ich mir da was gebastelt...

Mein Datentyp sieht so aus:
Delphi-Quellcode:
type
TZahl = record
  Zahl : array of shortint;
  Lange, Komma : longint;
  Negativ : boolean;
end;
Wenn ich nun etwas verarbeite, z.B. Addiere, dann mache ich das Zahl für Zahl (also in jedem Element meines Arrays steht nur eine Ziffer). Das ganze funktioniert mir Addieren und Subtrahieren perfekt, Multiplizieren war auch nicht schwer. Aber wie zum Teufel soll das mit Dividieren gehen???

Mathematisch geht das glaube ich garnicht, oder???

Dax 2. Sep 2004 17:28

Re: dividieren verdammt langer Zahlen
 
Hagens DEC-Math. Kann verdammt lange Zahlen vererbeiten.

Hier im Forum suchenUnendlich viele Nachkommastellen

Oder direkter Link zum Thread: Thread

glkgereon 2. Sep 2004 17:31

Re: dividieren verdammt langer Zahlen
 
überleg, überleg.... hmm

du könntest es so machen:

(entwurf von 1 minute überlegung..)

Delphi-Quellcode:
for i:=1 to length(Zahl.zahl) do
  begin
  if Zahl.Zahl[i] mod zuDividieren <> 0  //wenns nicht aufgeht
  then Zahl.Zahl[i+1]:=Zahl.Zahl[i+1]+Zahl.zahl[i] mod zuDividieren; //dann wird der rest zur ziffer drunter dazugetan
  Zahl.Zahl[i]:=Zahl.Zahl[i] Div zuDividieren;
  end;
allerdings kann es probleme geben wenn du shortiont nutzt, ach nee, is ja bis 256 :wall: :wall:

obwohl, wenn du ne primzahl über 100 teilst dann isses im arsch...

es muss halbwegs aufgehen...

nee, ehrlich, das müsste funzen...

Dax 2. Sep 2004 17:34

Re: dividieren verdammt langer Zahlen
 
Ich bleibe dabei: Der Weg über Hagens DECMath ist besser, da es für solche Dinge optimiert ist.

glkgereon 2. Sep 2004 17:39

Re: dividieren verdammt langer Zahlen
 
wo du wahrscheinlich recht hast :-D

aber ich schätze er will sowas ähnliches selber machen

aber er hat gefragt wie er das machen kann, er könnte es aus hagens dingens rauskopieren

:zwinker:

Patrick 2. Sep 2004 17:44

Re: dividieren verdammt langer Zahlen
 
Ich könnte es kopieren, aber das will ich nicht! Ich habe die ersten drei Rechenarten auf meine Weis programmiert, jetzt will ich das auch mit der Letzten.

Also ich hab mir den Kram vom Hagen mal angesehen...
Ganz Ehrlich: Ich verstehe da nur Bahnhof

@glkbkk
Deine Lösung hinkt ein Wenig.
Was mache ich denn, wenn der Teiler sehr viel größer ist? Sagen wir einfach ich will eine 1000 stellige Zahl durch eine 1000 stellige Zahl teilen.

atreju2oo0 2. Sep 2004 17:47

Re: dividieren verdammt langer Zahlen
 
Also ich würde einfach die schriftliche Division programmieren...
Das ist für beliebig große Zahlen möglich!
Wahrscheinlich gibt es aber einen effizienteren Weg...

glkgereon 2. Sep 2004 17:48

Re: dividieren verdammt langer Zahlen
 
Zitat:

Ich könnte es kopieren, aber das will ich nicht! Ich habe die ersten drei Rechenarten auf meine Weis programmiert, jetzt will ich das auch mit der Letzten.
siehste dax, sag ich doch :mrgreen: :mrgreen:

AAALLLSSSOOO, meine lösung:

lass dir was einfallen :mrgreen: :mrgreen:

nee, ma ernsthaft, was werden das für zahlen sein mit denen du das machst?

wenn der größte primfaktor unter 256 liegt (oder was du fürn typ nimmst), dann kannst meine lösung nehmen...

Patrick 2. Sep 2004 17:48

Re: dividieren verdammt langer Zahlen
 
Stellt euch doch mal vor, der Teiler passt nicht in einen Datentyp...
Daran habe ich doch auch schon gedacht, aber nur so lange, bis ich einen zu großen Teiler hatte.

glkgereon 2. Sep 2004 18:53

Re: dividieren verdammt langer Zahlen
 
ja dann sag halt

Delphi-Quellcode:
try
  for i:=1 to length(Zahl.zahl) do
  begin
    if Zahl.Zahl[i] mod zuDividieren <> 0  //wenns nicht aufgeht
    then Zahl.Zahl[i+1]:=Zahl.Zahl[i+1]+Zahl.zahl[i] mod zuDividieren; //dann wird der rest zur ziffer drunter dazugetan
    Zahl.Zahl[i]:=Zahl.Zahl[i] Div zuDividieren;
  end;
except
  Application.MessageBox('Zu großer Primfaktor','Es wurden Divisonsoperationen mit einer Zahl durchgeführt, dessen Primfaktoren zu groß sind');
end;
wenns dir so nicht gefällt nimm hagens unit...Mann!


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:56 Uhr.
Seite 1 von 2  1 2      

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