![]() |
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:
mein lehrer hat mir folgende formel gegeben:
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; Zitat:
ich denke das liegt daran das delphi mit so hohen zahlen nicht zurechtkommt was meint ihr? |
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 |
Re: Hohe Zahlen
Zitat:
Delphi-Quellcode:
wird wohl 'ne globale Konstante sein, denk ich mal.
x := y * // y = constante = 6,67 * 10^(-11)
Gruß Calculon -- |
Re: Hohe Zahlen
Delphi-Quellcode:
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.
const
y = 0.0000000000667; r = 6378137; // in meter liegt vllt daran :stupid: kennt jemand eine gute BigInt - klasse? ich hab bisher nur ![]() am besten wäre es natürlich wenn diese BigInt auch mit kommazahlen umgehen könnte... |
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. |
Re: Hohe Zahlen
Hagens BigInt-Klasse finde ich nicht :(
ist die bei DEC dabei? ich hab mal DEC eingebunden, er findet aber kein TBigInt |
Re: Hohe Zahlen
![]() aber die brauchst du nicht wirklich für dein Problem. Gruß Hagen |
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. |
Re: Hohe Zahlen
Fliesskommazahlen haben zwar einen großen Wertebereich aber eine begrenzte Genauigkeit
|
Re: Hohe Zahlen
Die Genauigkeit ist auch mehr als ausreichend, würde ich mal sagen. (bis zu 22 Dezimalen, IIRC)
|
Re: Hohe Zahlen
Typ Bit Mantisse
Single 23 Double 52 Extended 64 Extended: -4294967296 - 4294967295 das Entspricht nur eine Genauigkeit auf 9 stellen. |
Re: Hohe Zahlen
O_o?
2^64=1,8*10^19 |
Re: Hohe Zahlen
Da vorzeichenbehaftet nur 2 * 2^32
|
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. |
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? |
Re: Hohe Zahlen
Zitat:
|
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:
Und wegen dem interessant: Mein Physiklehrer will das... nicht ich^^ Zitat:
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: |
Re: Hohe Zahlen
Zitat:
Einfach überschlagen (also etwas überschätzt) beträgt die Energie: GPE = mgh = 1000 * 10 * 1000 = 10 MJ, nicht 10 kJ ;) |
Re: Hohe Zahlen
Zitat:
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? |
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 ;)
|
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) |
Re: Hohe Zahlen
Zitat:
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:
|
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:
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. |
Re: Hohe Zahlen
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
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^^ |
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:
So in etwa sollte das aussehen.
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; |
Re: Hohe Zahlen
so, mal schauen ob ich das richtig verstanden habe:
Delphi-Quellcode:
stimmt das so?
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; 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: |
Re: Hohe Zahlen
Was kommt denn raus, wenn du Start und Endwert in die Formel von deinem Lehrer steckst?
|
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.
|
Re: Hohe Zahlen
Ich denke, es müssten so ca. 4x10^14J rauskommen. Vielleicht hilft das ja weiter.
|
Re: Hohe Zahlen
Wie hast du das denn berechnet?
|
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 19:04 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