AGB  ·  Datenschutz  ·  Impressum  







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

Wurzel aus Int64 ziehen

Ein Thema von Filou · begonnen am 15. Jul 2004 · letzter Beitrag vom 15. Jul 2004
Antwort Antwort
Filou

Registriert seit: 31. Mai 2004
39 Beiträge
 
Delphi 7 Personal
 
#1

Wurzel aus Int64 ziehen

  Alt 15. Jul 2004, 17:27
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:
//wurzel, zahl:LongInt;
wurzel := trunc(sqrt(zahl));
Doch bei Int64 klappt das nicht. Wie kann ich trotzdem die Wurzel aus einem Int64 ziehen?

Tschau und vielen Dank im vorraus,
Filou
  Mit Zitat antworten Zitat
Benutzerbild von The-X
The-X

Registriert seit: 31. Aug 2003
Ort: Woffelsbach / user.exe ;)
377 Beiträge
 
Delphi 7 Personal
 
#2

Re: Wurzel aus Int64 ziehen

  Alt 15. Jul 2004, 17:45
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)
WGET ftp://root@fbi.us.gov/secret/worldreign.exe <- damit werde ich die Weltherrschaft an mich reissen!
=> irc://irc.quakenet.eu.org:6667/delphi.de da werden Sie auch (manchmal) geholfen
  Mit Zitat antworten Zitat
micsie

Registriert seit: 12. Jun 2003
Ort: Steinheim
122 Beiträge
 
Delphi 2005 Architect
 
#3

Re: Wurzel aus Int64 ziehen

  Alt 15. Jul 2004, 17:48
Hallo,

ich kenne zwar nicht die direkte Möglichkeit in Delphi, du könntest aber evtl. auch eine eigene Funktion programmieren (siehe Babylonisches Verfahren - http://mo.mathematik.uni-stuttgart.d...3/index_s.html)

mfg micsie
Software is like sex: it's better when it's free (Linus Torvalds)
{KDT}
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Wurzel aus Int64 ziehen

  Alt 15. Jul 2004, 17:49
So geht es:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  wurzel: LongInt;
  Radiant: Extended;
begin
  Radiant := 144;
  wurzel := Trunc(sqrt(Radiant));
  ShowMessage(IntToStr(wurzel));
end;
Warum sqrt auch einen LongInt akzeptiert, wo es doch einen Extended erwartet, kann ich dir auch nicht sagen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von The-X
The-X

Registriert seit: 31. Aug 2003
Ort: Woffelsbach / user.exe ;)
377 Beiträge
 
Delphi 7 Personal
 
#5

Re: Wurzel aus Int64 ziehen

  Alt 15. Jul 2004, 18:00
warscheinlich weil er intern vom Compiler in einen reellen Datentyp umgewandelt wird

[edit] zumindest für diese Funktion [/edit]
WGET ftp://root@fbi.us.gov/secret/worldreign.exe <- damit werde ich die Weltherrschaft an mich reissen!
=> irc://irc.quakenet.eu.org:6667/delphi.de da werden Sie auch (manchmal) geholfen
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Wurzel aus Int64 ziehen

  Alt 15. Jul 2004, 18:03
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...
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von The-X
The-X

Registriert seit: 31. Aug 2003
Ort: Woffelsbach / user.exe ;)
377 Beiträge
 
Delphi 7 Personal
 
#7

Re: Wurzel aus Int64 ziehen

  Alt 15. Jul 2004, 18:41
ich hoffe doch du meinst Byte und nicht bit weil sonst wäre Int64 = Byte
WGET ftp://root@fbi.us.gov/secret/worldreign.exe <- damit werde ich die Weltherrschaft an mich reissen!
=> irc://irc.quakenet.eu.org:6667/delphi.de da werden Sie auch (manchmal) geholfen
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Wurzel aus Int64 ziehen

  Alt 15. Jul 2004, 20:38
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Filou

Registriert seit: 31. Mai 2004
39 Beiträge
 
Delphi 7 Personal
 
#9

Re: Wurzel aus Int64 ziehen

  Alt 15. Jul 2004, 20:39
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:
var
  code:integer;
  zahl, wurzel:int64;
  stri:string;
  ext:extended;

  stri := IntToStr(zahl);
  Val(stri,ext,code);
  wurzel := trunc(sqrt(ext));
Die zweite Möglichkeit baut auf dem Babylonischen Algorythmus auf.
Delphi-Quellcode:
var
  zahl, wurzel:int64;
  i:integer;
  ext:extended;

ext := 1;
for i:=1 to 25 do
  ext := (ext + (zahl/ext))/2;

wurzel := trunc(ext);
Tschau!
  Mit Zitat antworten Zitat
Filou

Registriert seit: 31. Mai 2004
39 Beiträge
 
Delphi 7 Personal
 
#10

Re: Wurzel aus Int64 ziehen

  Alt 15. Jul 2004, 21:07
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.
  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 20:08 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