![]() |
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:
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???
type
TZahl = record Zahl : array of shortint; Lange, Komma : longint; Negativ : boolean; end; Mathematisch geht das glaube ich garnicht, oder??? |
Re: dividieren verdammt langer Zahlen
Hagens DEC-Math. Kann verdammt lange Zahlen vererbeiten.
![]() Oder direkter Link zum Thread: ![]() |
Re: dividieren verdammt langer Zahlen
überleg, überleg.... hmm
du könntest es so machen: (entwurf von 1 minute überlegung..)
Delphi-Quellcode:
allerdings kann es probleme geben wenn du shortiont nutzt, ach nee, is ja bis 256 :wall: :wall:
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; obwohl, wenn du ne primzahl über 100 teilst dann isses im arsch... es muss halbwegs aufgehen... nee, ehrlich, das müsste funzen... |
Re: dividieren verdammt langer Zahlen
Ich bleibe dabei: Der Weg über Hagens DECMath ist besser, da es für solche Dinge optimiert ist.
|
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: |
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. |
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... |
Re: dividieren verdammt langer Zahlen
Zitat:
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... |
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. |
Re: dividieren verdammt langer Zahlen
ja dann sag halt
Delphi-Quellcode:
wenns dir so nicht gefällt nimm hagens unit...Mann!
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:30 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