![]() |
Wurzel aus Int64 ziehen
Hallo,
zur Berechnung von größeren Zahlen muss ich aus einer Zahl vom Datentyp Int64 die Wurzel ziehen. Ich hab es mit folgenden Code versucht, der bei LongInt funktioniert:
Delphi-Quellcode:
Doch bei Int64 klappt das nicht. Wie kann ich trotzdem die Wurzel aus einem Int64 ziehen?
//wurzel, zahl:LongInt;
wurzel := trunc(sqrt(zahl)); Tschau und vielen Dank im vorraus, Filou |
Re: Wurzel aus Int64 ziehen
ich hab zu Hause eine Funktion um Exponenten zu jeder Basis mit einem Einzeiler zu berechnen ... damit kann man auch die 2. -n. Wurzel aus einer Zahl ziehen.
Ob das allerdings auch mit Int64 funktioniert weiss ich nicht, ich werde die Code-Zeile aber hier Posten, wenn ich zu Hause bin (also heute abend) ;) |
Re: Wurzel aus Int64 ziehen
Hallo,
ich kenne zwar nicht die direkte Möglichkeit in Delphi, du könntest aber evtl. auch eine eigene Funktion programmieren (siehe Babylonisches Verfahren - ![]() mfg micsie |
Re: Wurzel aus Int64 ziehen
So geht es:
Delphi-Quellcode:
Warum sqrt auch einen LongInt akzeptiert, wo es doch einen Extended erwartet, kann ich dir auch nicht sagen.
procedure TForm1.Button1Click(Sender: TObject);
var wurzel: LongInt; Radiant: Extended; begin Radiant := 144; wurzel := Trunc(sqrt(Radiant)); ShowMessage(IntToStr(wurzel)); end; |
Re: Wurzel aus Int64 ziehen
warscheinlich weil er intern vom Compiler in einen reellen Datentyp umgewandelt wird ;)
[edit] zumindest für diese Funktion [/edit] |
Re: Wurzel aus Int64 ziehen
Ne Luckie, er will ja die Wurzel aus nem Int64 ziehen, nicht nem LongInt. LongInt ist 4 Bit breit, und Int64 8 Bit, somit passt ein LongInt noch in Extended rein, aber ein Int64 nicht mehr ohne Genauigkeitsverlust. LongInt -> Extended geht implizit, von daher meckert Delphi auch net. Aber bei Int64 ist alles anders...
|
Re: Wurzel aus Int64 ziehen
ich hoffe doch du meinst Byte und nicht bit :mrgreen: weil sonst wäre Int64 = Byte
|
Re: Wurzel aus Int64 ziehen
:oops:
|
Re: Wurzel aus Int64 ziehen
Ich hab zwei Möglichkeiten gefunden. Möglichkeit 1 besteht darin, dass Int64-Variable in einen String und dann in den Datentyp Extended umgewandelt wird. Um anschließend die Wurzel zuziehen können.
Delphi-Quellcode:
Die zweite Möglichkeit baut auf dem Babylonischen Algorythmus auf.
var
code:integer; zahl, wurzel:int64; stri:string; ext:extended; stri := IntToStr(zahl); Val(stri,ext,code); wurzel := trunc(sqrt(ext));
Delphi-Quellcode:
Tschau!
var
zahl, wurzel:int64; i:integer; ext:extended; ext := 1; for i:=1 to 25 do ext := (ext + (zahl/ext))/2; wurzel := trunc(ext); |
Re: Wurzel aus Int64 ziehen
Anmerkung: Beide Funktionen sind gleich schnell.
Falls man Int64 nicht ganz ausreizen möchte oder einem zu große Ergebnisse genügen, kann man im zweiten Beispiel einen kleineren Wert statt "25" verwenden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:14 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