Autor Beitrag
Swordooo
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 119

W2K, Windows XP Professional
Delphi 2005 Personal, Delphi 7 Personal
BeitragVerfasst: Mi 02.07.08 18:40 
Hi,
Ich möchte schon seit Längerem ein Programm basteln, dass mir eine Wurzel zieht (undzwar sehr viele Kommastellen!).

Hier ist eine Beispielaufgabe aus der Schule:

Finde die Wurzel aus 52! (√52)
√52 = √13*4
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
1.) Schritt:13+4  = 8,5
                 2

2.) Schritt: 52   = 6,1
8,5

3.) Schritt: 8,5+6,1   = 7,3
                  2

4.) Schritt: 52      = 7,123
                7,3

5.) "        7,3+7,123  = 7,2115
                    2

usw... Das ist die Methode, wie man Wurzeln mit der Hand zieht. Hätte da jem. eine Idee, wie man das in Delphi verwirklichen kann?

MfG Swordooo

Moderiert von user profile iconNarses: Code-Tags hinzugefügt und Punkte entfernt
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Mi 02.07.08 18:48 
tjaa.. Canvas würde ich sagen
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Mi 02.07.08 18:57 
Hi,

Willst du:
  • Die Delphi-Entsprechung 'Sqrt()' für Wurzel 2?
  • Eine sehr genaue Wurzel? -> mehr als 19 Nachkommastellen, wie sie 'Extended' bietet? Es gibt auch vordefinierte Datentypen zum rechnen mit großen Zahlen.
  • (Wirklich, wie es aus dem Titel hervorgehen könnte das Wurzelzeichen zeichnen?)

Versuch mal die code- bzw. delphi-Tags. die dürften deine Formatierung erhalten.

mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
Swordooo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 119

W2K, Windows XP Professional
Delphi 2005 Personal, Delphi 7 Personal
BeitragVerfasst: Mi 02.07.08 19:00 
ist canvas nicht für Grafische Darstellungen da?

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

ohh danke.
Sqrt() ist genau das was ich suche und dann mach ich das mit Extended.

Gibt es eine grenze bei Extended (Kommsstellen, generelle Länge)?

Ich glaube Extended geht von: 3,4 x 10^-4932 bis 1,1 x 10^4932, aber ich dachte immer Extended hat nur 20 Nachkommastellen und ist 10 Byte groß?
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Mi 02.07.08 19:08 
Hi,

user profile iconSwordooo hat folgendes geschrieben:
ist canvas nicht für Grafische Darstellungen da?
Ja, er hat nur den Titel gelesen. Deshalb auch meine mehr oder weniger dumme Frage zu deinem Post weiter oben. Bin aber gerade dabei, nen Algorithmus zu zu schreiben und mache gleich nen Edit.



Edit1: Schau mal hier.

Edit2: So. größere Genauigkeit als Sqrt() bekommst du aber nur, wenn du die Zahlen anders speicherst.. da bräuchtest du imho einen Datentypen wie bigint oder so, der nicht im Standard-Delphi enthalten ist.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
function GetAccurateSqrt(X: Extended): Extended;
var
  Speicher1, Speicher2: Extended;
  tmpTimer: TTimer;
begin
  //initialisieren der zwischenspeicher mit zwei Faktoren der Zahl
    Speicher1 := X / 2;
    Speicher2 := 2;  //kannst schlecht ne Gleitkommazahl auf Teiler prüfen, insofern.. Auf Integer willst du wahrscheinlich auch nicht begrenzen^^.
  //lost gehts ;)
  tmpTimer := TTimer.Create(nil);
  tmpTimer.Interval := 100;  //nach 100 Millisekunden Abbruch. Wahrscheinlch würde man eher eine fixe Schleife verwenden: for i := 0 to 12324323
  tmpTimer.Tag := 0;
  tmpTimer.Enabled := true;
  repeat
    Speicher1 := (Speicher1 + Speicher2) / 2;
    Speicher2 := X / Speicher1;
  until tmpTimer.Tag = 1;
  tmpTimer.Free;
  result := Speicher2;
end;

procedure GetAccSqrt_TimeOut(Sender: TObject);  //nicht die feine, englische Art - aber soll ja keine langsamen Computer mit fixer Schleifendurchlaufzahl ausbremsen^^
begin
  (Sender as TTimer).Tag := 1;
end;


So, zu den Problemen: Wie o.ä., bräuchtest du wahrscheinlcih einen besonderen Datentypen, damit es sich lohnt - imho unrealistischer Aufwand ;) .

Ich habe gerade überlegt, was man am besten als Startwerte für V1, V2 nimmt und bin zu dem Schluss gekommen: Am besten Sqrt(X), Sqrt(X) :lol:

Das sind die beiden größtmöglichen Teiler, damit erhältst du am Ende die größte Genauigkeit^^

mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
Swordooo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 119

W2K, Windows XP Professional
Delphi 2005 Personal, Delphi 7 Personal
BeitragVerfasst: Mi 02.07.08 19:36 
Jo Danke für deine Mühe!
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Mi 02.07.08 21:22 
zu meiner Verteidigung:

ICh dachte, er möchte die Bruchstriche, die er in seinem Post so mühsam mit

234*24*24

....2

dargestellt hat in Delphi anzeigen. sonst hätte ich auch sqrt gesagt ^^
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mi 02.07.08 21:39 
user profile iconHidden hat folgendes geschrieben:
Ich habe gerade überlegt, was man am besten als Startwerte für V1, V2 nimmt und bin zu dem Schluss gekommen: Am besten Sqrt(X), Sqrt(X) :lol:

Das sind die beiden größtmöglichen Teiler, damit erhältst du am Ende die größte Genauigkeit^^

Super, um die Wurzel zu berechnen benutze ich die Wurzel :roll:

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Mi 02.07.08 21:59 
hat doch was ^^
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Mi 02.07.08 22:14 
user profile iconHidden hat folgendes geschrieben:
Ich habe gerade überlegt, was man am besten als Startwerte für V1, V2 nimmt und bin zu dem Schluss gekommen: Am besten Sqrt(X), Sqrt(X) :lol:

user profile iconMartok hat folgendes geschrieben:
Super, um die Wurzel zu berechnen benutze ich die Wurzel :roll:

Deshalb ja das :lol: -Simley. Mit anderen Worten: Bei dieser Art von Berechnung erhalte ich stets eine kleinere Genauigkeit als mit Sqrt(), da diese Methode die größte Genauigkeit bei Startwert Sqrt(), Sqrt() hat.

mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)