Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Hohe Zahlen (https://www.delphipraxis.net/95893-hohe-zahlen.html)

dominikkv 15. Jul 2007 14:43


Hohe Zahlen
 
Hi

ich versuche grad eine function zu schreiben die mir ausrechnet wie viel energie ich brauche um mit einem raumschiff von der erde wegzufliegen...

ich habe nen trackbar mit dem ich die höhe einstelle, diese höhe wird dann in abschnitte unterteilt und ausgerechnet wie viel energie benötigt wird um diese höhe zu überwinden

pos = die höhe insgesammt
z = anzahl der abschnitte
mPlanet, mSchiff = masse des planeten / des schiffes

Delphi-Quellcode:
function Energieberechnung(Pos, Z, mPlanet, mSchiff: Cardinal): Extended;
var h: Extended;
    I: Cardinal;
    x: Extended;
begin
  h := Pos/Z;      // die höhe für jeden abschnitt
  result := 0;

  for i := 1 to Z do
    begin      
      x := y *         // y = constante = 6,67 * 10^(-11)
           (
           (mPlanet*mSchiff) / (
                               (r+(i*h-h)) * (r+(i*h))   // r = radius erde = 6378137
                               )
           ) *
           h;
      Result := Result + x;
    end;
end;
mein lehrer hat mir folgende formel gegeben:

Zitat:

w = y * ((m * M)/(r0*r1)) * (r1-r0)
das problem: das ergebnis ist immer sehr klein (0.000000000234412 oder so)
ich denke das liegt daran das delphi mit so hohen zahlen nicht zurechtkommt

was meint ihr?

ULIK 15. Jul 2007 14:53

Re: Hohe Zahlen
 
Prüf doch erst mal, ob die Einheiten passen. Eventuell mußt Du hier noch etwas justieren.

[edit]Du rechnest mit y definierst das aber nicht![/edit]

Grüße,
Uli

calculon 15. Jul 2007 15:05

Re: Hohe Zahlen
 
Zitat:

Zitat von ULIK
[edit]Du rechnest mit y definierst das aber nicht![/edit]

Delphi-Quellcode:
x := y *         // y = constante = 6,67 * 10^(-11)
wird wohl 'ne globale Konstante sein, denk ich mal.

Gruß

Calculon
--

dominikkv 15. Jul 2007 15:10

Re: Hohe Zahlen
 
Delphi-Quellcode:
const
  y = 0.0000000000667;
  r = 6378137;    // in meter
hmm einheiten müssten eigendlich passen... nur für die masse der erde nehme ich halt 10000 kg, weil ich sonst probleme mit dem integer-wertebereich hab... eigendlich müsste das 5974000000000000000000000 kg sein.

liegt vllt daran :stupid:

kennt jemand eine gute BigInt - klasse?
ich hab bisher nur diese gefunden, und bin nicht wirklich davon begeistert weil man mit der nicht rechnen kann :lol:

am besten wäre es natürlich wenn diese BigInt auch mit kommazahlen umgehen könnte...

3_of_8 15. Jul 2007 15:12

Re: Hohe Zahlen
 
Nimm halt statt Integer einen Single, Double oder Extended, dann passt das.

EDIT: Hagens BigInt-Klasse ist verdammt gut. Such mal danach.

dominikkv 15. Jul 2007 16:15

Re: Hohe Zahlen
 
Hagens BigInt-Klasse finde ich nicht :(

ist die bei DEC dabei?
ich hab mal DEC eingebunden, er findet aber kein TBigInt

negaH 15. Jul 2007 17:01

Re: Hohe Zahlen
 
http://www.michael-puff.de/Developer...n/DEC_5_1c.zip

aber die brauchst du nicht wirklich für dein Problem.

Gruß Hagen

3_of_8 15. Jul 2007 17:43

Re: Hohe Zahlen
 
Sag ich doch: Ein Single, Double, Extended ist perfekt, außerdem brauchst du sowieso Gleitkommatypen bei deiner Berechnung.

Single, Double, Extended können mit Zahlen bis 10^38, 10^308 und 10^4932 umgehen, das reicht locker.

Wenn die Berechnungen falsch sind, liegt es höchstwahrscheinlich an deinem Code. Ich blicke aber weder bei der Formel noch bei deinem Code durch.

mkinzler 15. Jul 2007 17:48

Re: Hohe Zahlen
 
Fliesskommazahlen haben zwar einen großen Wertebereich aber eine begrenzte Genauigkeit

3_of_8 15. Jul 2007 17:52

Re: Hohe Zahlen
 
Die Genauigkeit ist auch mehr als ausreichend, würde ich mal sagen. (bis zu 22 Dezimalen, IIRC)

mkinzler 15. Jul 2007 18:05

Re: Hohe Zahlen
 
Typ Bit Mantisse
Single 23
Double 52
Extended 64

Extended: -4294967296 - 4294967295
das Entspricht nur eine Genauigkeit auf 9 stellen.

3_of_8 15. Jul 2007 18:08

Re: Hohe Zahlen
 
O_o?

2^64=1,8*10^19

mkinzler 15. Jul 2007 18:13

Re: Hohe Zahlen
 
Da vorzeichenbehaftet nur 2 * 2^32

3_of_8 15. Jul 2007 18:15

Re: Hohe Zahlen
 
O_o?

Wenn dann 2^63. Wie war das noch mit Potenzregeln? a^b/a^c=a^(b-c), also 2^64/2^1=2^63.

Außerdem: Das Vorzeichenbit ist IIRC extra, nicht in der Mantisse.

Nikolas 15. Jul 2007 18:28

Re: Hohe Zahlen
 
Aber mal wieder zum Thema. Was willst du mit der Rechnung eigentlich erreichen?

Wenn man weiss, dass die Gravitation ein 1/r-Potential hat, oder sich die Gleichung von deinem Lehrer mal schräg anschaut, sieht man, dass da doch nichts anderes steht als
W = yMm(1/r1-1/r0)

Und dann rechnest du das Stückchenweise aus. Da ist doch nichts interessantes dabei.
Wäre es nicht spannender über die Gleichung für die Gravitationskraft die Kraft in einer bestimmten Enfernung zu berechnen und dann das Produkt aus Kraft und Wegstrecke auszusummieren und dieses Ergebniss dann mit der gegebenen Gleichung zu vergleichen? Also eine einfache Art der nummerischen Integration?

mkinzler 15. Jul 2007 19:21

Re: Hohe Zahlen
 
Zitat:

Wenn dann 2^63
Stimmt

dominikkv 15. Jul 2007 19:25

Re: Hohe Zahlen
 
ok, der tipp mit Extended war garnichtmal so übel :mrgreen:

ist es realistisch das ein 1000 kg schweres Raumschiff 9795 Joule braucht um von der Erde (m = 5974000000000000000000000 kg) 1 km wegzukommen?

Zitat:

Zitat von Nikolas
Wenn man weiss, dass die Gravitation ein 1/r-Potential hat, oder sich die Gleichung von deinem Lehrer mal schräg anschaut, sieht man, dass da doch nichts anderes steht als
W = yMm(1/r1-1/r0)

richtig :thumb:

Zitat:

Zitat von Nikolas
Und dann rechnest du das Stückchenweise aus. Da ist doch nichts interessantes dabei.

Mach ich ja auch :stupid:
Und wegen dem interessant: Mein Physiklehrer will das... nicht ich^^

Zitat:

Zitat von Nikolas
Wäre es nicht spannender über die Gleichung für die Gravitationskraft die Kraft in einer bestimmten Enfernung zu berechnen und dann das Produkt aus Kraft und Wegstrecke auszusummieren und dieses Ergebniss dann mit der gegebenen Gleichung zu vergleichen? Also eine einfache Art der nummerischen Integration?

woot woot? :drunken:
könntest du das vllt nochmal in deutsch übersetzen xD
ich bin für alle vorschläge offen :zwinker:

ansonsten: danke für all eure antworten :cheers:

jfheins 15. Jul 2007 20:00

Re: Hohe Zahlen
 
Zitat:

Zitat von dominikkv
ok, der tipp mit Extended war garnichtmal so übel :mrgreen:

ist es realistisch das ein 1000 kg schweres Raumschiff 9795 Joule braucht um von der Erde (m = 5974000000000000000000000 kg) 1 km wegzukommen?

Nein.

Einfach überschlagen (also etwas überschätzt) beträgt die Energie:

GPE = mgh
= 1000 * 10 * 1000
= 10 MJ, nicht 10 kJ

;)

dominikkv 15. Jul 2007 20:31

Re: Hohe Zahlen
 
Zitat:

Zitat von jfheins
Zitat:

Zitat von dominikkv
ok, der tipp mit Extended war garnichtmal so übel :mrgreen:

ist es realistisch das ein 1000 kg schweres Raumschiff 9795 Joule braucht um von der Erde (m = 5974000000000000000000000 kg) 1 km wegzukommen?

Nein.

Einfach überschlagen (also etwas überschätzt) beträgt die Energie:

GPE = mgh
= 1000 * 10 * 1000
= 10 MJ, nicht 10 kJ

;)

aber du hast ja nicht g!
g ist auf der erde ca 9,81, allerdings bin ich dann schon soweit von der erde entfernt das g immer kleiner wird.
darum unterteile ich die strecke ja auch in viele kleine einzelstrecken und rechne dann mit einem mittelwert.

oder irre ich mich da?

jfheins 15. Jul 2007 21:03

Re: Hohe Zahlen
 
Wie gesagt, diese Schätzung liegt zu hoch, da ein konstantes g angenommen wird, aber ich glaue nicht, dass dies einen Faktor von 1000 ausmacht ;)

3_of_8 15. Jul 2007 21:06

Re: Hohe Zahlen
 
Wieso Teilstrecken?

Du könntest doch einfach mit dem Mittelwert von g rechnen (algebraisch oder harmonisch, bin mir jetzt nicht ganz sicher)

dominikkv 15. Jul 2007 21:10

Re: Hohe Zahlen
 
Zitat:

Zitat von jfheins
Wie gesagt, diese Schätzung liegt zu hoch, da ein konstantes g angenommen wird, aber ich glaue nicht, dass dies einen Faktor von 1000 ausmacht ;)

ähh..lol.. du hast recht^^
ich hab vergessen von meter in kilometer umzurechnen... :wall:
für 1 meter würde 9795 Joule rauskommen, für ein kilometer 9793440 Joule. :angel2:

Zitat:

Zitat von 3_of_8
Wieso Teilstrecken?
Du könntest doch einfach mit dem Mittelwert von g rechnen (algebraisch oder harmonisch, bin mir jetzt nicht ganz sicher)

weil das meine aufgabenstellung ist :wink:

Nikolas 15. Jul 2007 21:20

Re: Hohe Zahlen
 
Zum abschätzen: auf der Erdoberfläche gilt recht genau, dass W=m*g*h, wäre g auch noch in den nächsten 1000km konstant, hättest du hier : W=1000kg*9.81m/s^2*1000km=10^10J also etwa 10GJ.

Zitat:

woot woot?
könntest du das vllt nochmal in deutsch übersetzen xD
ich bin für alle vorschläge offen
Du kennst doch sicher die Aussage, dass Energie = Kraft*Wegstrecke. Auf der Erdoberfläche hast du als Kraft die Gravitationskraft (m*g) und eine Wegstrecke (h). Nun ist aber die Gravitationskraft nicht überall gleich stark sondern nimmt antiproportional zum Abstandsquadrat ab. Wenn du also deine Rakete irgendwo hinstellst und die Gravitationskraft an dieser Stelle misst, und dann das Raumschiff doppelt so weit von der Erde entfernst, wirst du nur noch eine Kraft messen, die ein viertel der zuerst gemessenen Kraft entspricht. In einer Gleichung sieht dass dann so aus: F=const*mM/r^2. Wobei const die Gravitationskonstante, M die Erdmasse, m die Raketenmasse und r der Abstand zwischen erdmittelpunkt und Rakete ist.
Jetzt willst du die Energie ausrechnen, die du benörigst, um eine Rakete von r0 auf r1 zu bringen.
Da die Kraft nicht konstant ist, musst du den Weg stückchenweise berechnen. Du berechnest die Energie, um die Rakete von r0 auf r0+100m zu bringen, dann die Energie von ro+100 auf r0+200m usw.
Da diese Wegstücke recht klein sind, kannst du davon ausgehen, dass sich die Gravitationskraft innerhalb dieser kleinen Stücke nicht allzu sehr verändern wirst.

also kannst du die Energie auch so ausrechnen:
W= F(r0)*100m+F(r0+100)*100m+...

Als nächstes kannst du dann die schrittweise veringern und dann sehen, dass der Fehler mit kleineren Schrittweiten immer kleiner wird.

dominikkv 15. Jul 2007 21:49

Re: Hohe Zahlen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Nikolas
Du kennst doch sicher die Aussage, dass Energie = Kraft*Wegstrecke. Auf der Erdoberfläche hast du als Kraft die Gravitationskraft (m*g) und eine Wegstrecke (h). Nun ist aber die Gravitationskraft nicht überall gleich stark sondern nimmt antiproportional zum Abstandsquadrat ab. Wenn du also deine Rakete irgendwo hinstellst und die Gravitationskraft an dieser Stelle misst, und dann das Raumschiff doppelt so weit von der Erde entfernst, wirst du nur noch eine Kraft messen, die ein viertel der zuerst gemessenen Kraft entspricht. In einer Gleichung sieht dass dann so aus: F=const*mM/r^2. Wobei const die Gravitationskonstante, M die Erdmasse, m die Raketenmasse und r der Abstand zwischen erdmittelpunkt und Rakete ist.
Jetzt willst du die Energie ausrechnen, die du benörigst, um eine Rakete von r0 auf r1 zu bringen.
Da die Kraft nicht konstant ist, musst du den Weg stückchenweise berechnen. Du berechnest die Energie, um die Rakete von r0 auf r0+100m zu bringen, dann die Energie von ro+100 auf r0+200m usw.
Da diese Wegstücke recht klein sind, kannst du davon ausgehen, dass sich die Gravitationskraft innerhalb dieser kleinen Stücke nicht allzu sehr verändern wirst.

also kannst du die Energie auch so ausrechnen:
W= F(r0)*100m+F(r0+100)*100m+...

Als nächstes kannst du dann die schrittweise veringern und dann sehen, dass der Fehler mit kleineren Schrittweiten immer kleiner wird.

hmm... ich dachte das ich genau das mit meinem programm mache...
ich unterteile die strecke in teile und schau wie viel energie ich für den ersten teil brauche, dann für den 2ten teil etc und addiere das ganze.

ich hab mal das projekt angehängt^^

Nikolas 15. Jul 2007 22:16

Re: Hohe Zahlen
 
Naja, aber du ziehst im nächsten Schritt wieder das ab, was du im ersten berechnet hast...

Dann lass dir doch mal die Zeilen ausgeben, du benutzt in der Schleife die gleichung, die dir auch das ergebniss ausrechnen kann.
In der ersten Schleifen runde rechnest du w=P(r0)-P(r0+100m);
in der zweiten Runde rechnest du P(r0+100) wieder dazu und ziehst p(r0+200m) wieder ab. und so weiter. die ganzen Zwischenergebnisse kannst du auch gleich weglassen. So was nennt sich umgangssprachlich eine Teleskopsumme weil man sie ohne jede Rechnung zusammenschieben kann und die Zwischenergebnisse nie sieht, weil man auch ohne sie den Endwert ausrechnen kann.

Ich stell mir das etwa so vor:

Delphi-Quellcode:
real mRakete=1000;
real MErde = GanzGroß;
real GravKonstante = KomischeZahl;

// gibt die Gravitationskraft im Abstand r zum erdmittelPunkt zurück
function Gravity(real r):real;
begin
return mRakete*mErde*GravKonstante/r^2;
end;

double r0=ErdRadius;
double r1=ErdRadius+100000m;
double dr=10;
double r=r0;

double W=0;
while (r<=r1) do
begin
W += dr*Gravity(r+dr/2); // Kraft in der Mitte des Intervalls
r+=dr;
end;
So in etwa sollte das aussehen.

dominikkv 15. Jul 2007 22:56

Re: Hohe Zahlen
 
so, mal schauen ob ich das richtig verstanden habe:
Delphi-Quellcode:
function F(r, mSchiff, mPlanet: Extended): Extended;
begin
  result := (y * mPlanet * mSchiff) / (r * r);
end;

function EnergieberechnungEx(Z: Cardinal; Pos, mPlanet, mSchiff: Extended): Extended;
var h: Extended;
    I: Cardinal;
    x: Extended;
begin
  if z = 0 then
    z := 1;
  h := (Pos*1000)/Z;
  result := 0;

  for i := 1 to Z do
    begin
      x := h * F(r+(i*h)/2, mSchiff, mPlanet);
      Result := Result + x;
    end;
end;
stimmt das so?
auf jedenfall ändert sich jetzt das ergebnis wenn ich die anzahl der schritte ändere und für 1 km braucht ein 1t schweres raumschiff 9794207 Joule :mrgreen:

achso: tausend Dank an dich, Nikolas
ich weiß garnicht wie ich mich bei dir bedanken kann :cheers:

Nikolas 15. Jul 2007 23:01

Re: Hohe Zahlen
 
Was kommt denn raus, wenn du Start und Endwert in die Formel von deinem Lehrer steckst?

Ultimator 15. Jul 2007 23:10

Re: Hohe Zahlen
 
Nur so zum überlegen: 9795J sind etwa 10kJ, das entspricht etwa der Energie in einem halben Glas Traubensaftschorle. Ich muss mir sowas immer bildlich vorstellen, dann klappt das mit dem Überschlagen einfacher.

Nicolai1234 16. Jul 2007 00:09

Re: Hohe Zahlen
 
Ich denke, es müssten so ca. 4x10^14J rauskommen. Vielleicht hilft das ja weiter.

Nikolas 16. Jul 2007 20:26

Re: Hohe Zahlen
 
Wie hast du das denn berechnet?

Nicolai1234 16. Jul 2007 20:37

Re: Hohe Zahlen
 
W = y * m1 * m2 * (1/r1-1/r2)

Hab die Formelsammlung gerad nicht da, aber y ist ungefähr 6,67*10^-11 oder so in dem dreh.
Ich denke, das wäre die richtige Formel.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 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 by Thomas Breitkreuz