Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Hex to Dezimal von Pi (https://www.delphipraxis.net/23610-hex-dezimal-von-pi.html)

cheatzs 6. Jun 2004 13:06


Hex to Dezimal von Pi
 
Hi Leute,

ich hab mich die letzten Stunden hingestetzt und das Verfahren von David H. Bailey zur Pi-Berechnung in Delphi umgsetzt. (nach einer C Vorlage)

Das Problem ist, dass dieses Verfahren die Zahl pi in Hexadezimalzahlen ausgbibt.

Es kommt also sowas raus wie
243F6A8885,A308D31319,8A2E037073,...
Auf einigen Websites hab ich auch die Darstellung als
3.243F6A8885A308D313198A2E037073
gefunden.

Leider sind alle Versuche diese Zahl irgendwie in das Dezimalsystem umzurechnen gescheitert.
Rauskommen müsste ja irgendwas mit 3.14159...

Wenn ihr also einen Tip habt, wie ich das hinbekommen könnt, wär das SUPI.

Bye

c113plpbr 6. Jun 2004 16:59

Re: Hex to Dezimal von Pi
 
Hex zahlen werden normalerweise in Delphi mir einem $-zeichen 'angekündigt'. Wenn du nun sowas machst: StrToInt('$123ABC'), dann kommt da: 1194684 ... sowas raus ...
Ich hoffe das hilft dir weiter ...

ciao, Philipp

nailor 6. Jun 2004 19:48

Re: Hex to Dezimal von Pi
 
ich bezweifel, ob das klappt, wenn man ein paarhundert (eher mehr) stellen hat

c113plpbr 6. Jun 2004 20:16

Re: Hex to Dezimal von Pi
 
Für rechnen mit langen Zahlen nehm ich immer Hagens DEC

cheatzs 8. Jun 2004 14:14

Re: Hex to Dezimal von Pi
 
Danke erstmal,
die erste Variante mit StrToInt war mir bekannt. Leider bietet sie nicht genügend Genauigkeit.

Wen es interessiert:

Um das ganze Handschriftlich auszurechnen kann man sich folgender Art der Rechnung bedienen.

3.243F6A8885...

3, 2 4 3 F
pi = 3 * 16^0 + 2 * 1/16^1 + 4 * 1/16^2 + 3 * 1/16^3 + 15 * 1/16^4 ...

Das eigentliche Problem, was allerdings wohl nicht lösbar ist, ist eine beliebige Stelle von Pi von Hex in Dezimal umzurechnen, ohne die vorherigen zu wissen.


Trotzdem Danke
Ich lass einfach die Hex-Zahlen

Bye

Nicolai1234 8. Jun 2004 14:56

Re: Hex to Dezimal von Pi
 
Zitat:

Zitat von cheatzs
pi = 3 * 16^0 + 2 * 1/16^1 + 4 * 1/16^2 + 3 * 1/16^3 + 15 * 1/16^4 ...

An der Formel stimmt was nicht: (glaube ich :!: )
Ich habe eine andere und bei dir steht 16^0 was eigentlich nicht geht!

Pi = 4 * (1/1-1/3+1/5-1/7+1/9-1/11+1/13-...)

Die kann man zwar umformen aber 16^0 ist bestimmt falsch!

cheatzs 8. Jun 2004 15:26

Re: Hex to Dezimal von Pi
 
@Nicolai1605

Also die Formel:
Zitat:

pi = 3 * 16^0 + 2 * 1/16^1 + 4 * 1/16^2 + 3 * 1/16^3 + 15 * 1/16^4 ...
rechnet das Hexadezimal pi (3,243F6A8885...) in das Dezimale Pi (3.1415926...) um.

Die Rechnung geht dann so weiter

3 * 16^0 = 3 (da 16^0 = 1 --> nur zur Veranschaulichung gedacht)

2*1/16^1 = 1/8

4*1/16^2 = 1/64

3*1/16^3 = 3/4096

15/16^4 = 15/65536

3+1/8+1/64+3/4096+15/65536 = ist rund 3.14158...

Die Formel die du beschrieben hast:
Zitat:

Pi = 4 * (1/1-1/3+1/5-1/7+1/9-1/11+1/13-...)
rechnet Pi neu aus.

Ich aber habe Pi bereits mit Hilfe einer anderen Methode berechnet - nur eben in Hexadezimalschreibweise.
Damit ich mit dieser Berechnung nun auch was anfangen kann, wollt ich sie in die Dezimalschreibweise umwandeln. Das geht aber leider nur wie oben beschrieben.

Hoffe du weißt jetzt, was ich mein

Bye

shmia 8. Jun 2004 15:27

Re: Hex to Dezimal von Pi
 
Zitat:

Zitat von Nicolai1605
An der Formel stimmt was nicht: (glaube ich :!: )
Ich habe eine andere und bei dir steht 16^0 was eigentlich nicht geht!

Die Formel stimmt schon (glaube ich :zwinker: ).
Genauer gesagt ist sie:
Pi = 3 * 16^0 + 2 * 16^(-1) + 4 * 16^(-2) + 3 * 16^(-3) + 15 * 16^(-4) ...
Wobei:
16^0 = 1
16^(-1) = 1/16 (ein sechzehntel)
16^(-2) = 1/(16^2) = 1 / (16*16)
...
Es handelt sich dabei um ein Festkommaformat. Es lässt sich relativ leicht
in ein binäres Festkommaformat transformieren:
aaaa.bbbbccccddddeeee
0011.0010010000111111

Hier die Umwandlung in das Extended-Format
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  h : string;
  x, f : Extended;
  i : Integer;
begin
   f := 1.0;
   h := '3243F6A8885';
   x := 0.0;

   for i := 1 to Length(h) do
   begin
      x := x + f * StrToInt('$'+h[i]);
      f := f / 16.0;
   end;

   Caption := FloatToStr(x);
end;

cheatzs 8. Jun 2004 15:45

Re: Hex to Dezimal von Pi
 
Danke für den Code,
leider muss ich sagen, wie ich weiter oben mit Sicherheit schon erwähnt habe, dass ich diese Art von Umrechnung nicht gebrauchen kann, da ich bei der Berechnung der Hexadezimalstellen von Pi jede beliebige Stelle berechnen kann - Also die n-te Stelle von Pi.

Ohne allerdings jede Stelle vor dieser Stelle zu wissen (was der Fall sein wird, da man bei der 1.000.000 Stelle nicht die Stellen vorher alle ausrechnen kann), kann ich pi nicht in Dezimalzahlen umwandeln. Dieses hatte ich aber versucht. (Es hat und wird nie klappen)

Ich wollte deshalb noch die korrekte Umrechnung von Hexadezimal- in Dezimalzahlen darstellen unter Hilfe aller vorherigen Stellen von Pi.

neolithos 8. Jun 2004 15:56

Re: Hex to Dezimal von Pi
 
Leider müssen bei dieser Umrechnung alle Stellen vorher ermittelt werden.


Nur Hex <-> Bin <-> Okt benötigt man keine Kenntnisse über die vorhergehenden zahlen.

Grund: Binäre d10 b1010


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:55 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