www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Englisch
  Status Grammatik
  Status Lektüre
  Status Korrekturlesen
  Status Übersetzung
  Status Sonstiges (Englisch)

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Uni-Numerik" - Maschinengenauigkeit
Maschinengenauigkeit < Numerik < Hochschule < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Uni-Numerik"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Maschinengenauigkeit: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 13:50 Fr 11.04.2014
Autor: Paivren

Hallo,

es gibt leider keinen passenden Unterpunkt für dieses Thema;
ich wollte es aber trotzdem hier posten, und nicht im Informatikbereich, da dort vielleicht anders an das Thema herangetreten wird.

http://matheplanet.com/default3.html?call=viewtopic.php?topic=61641&ref=http%3A%2F%2Fwww.google.de%2Furl%3Fsa%3Dt%26rct%3Dj%26q%3D%26esrc%3Ds%26source%3Dweb%26cd%3D2%26ved%3D0CDkQFjAB

Hier wird ein kleiner Code zum Bestimmen der Maschinengenauigkeit präsentiert (im Post des Antwortenden).

e=1;
while (e+1>1){
e=e/2;
}
e=2*e;

Angenommen, die Maschinengenauigkeit wäre [mm] 2^{-52} [/mm] (also Standard).
Irgendwann ist [mm] e=2^{-51}. [/mm] Die Bedingung ist erfüllt, e wird halbiert auf [mm] 2^{-52}. [/mm] Die Bedingung ist wieder erfüllt.
Dann wird e nochmal halbiert auf [mm] e^{-53}. [/mm] Aber diese Zahl kann der Computer nicht mehr darstellen und rundet auf, zu [mm] e^{-52}. [/mm] --> Endlosschleife.

Die Rundung haben wir so definiert:
f(n)= [mm] \pm \begin{cases} (1+m_{1}2^{-1}+...+m_{52}2^{-52})2^{k}, & \mbox{für } m_{53}=0 \\ (1+m_{1}2^{-1}+...+m_{52}2^{-52} +2^{-52})2^{k}, & \mbox{für } m_{53}= 1 \end{cases} [/mm]

Irgendwie versteh ich das maschineninterne Prinzip der Rundung wohl nicht so richtig.
Wenn e zu [mm] 2^{-54} [/mm] werden würde, so würde es auf 0 gerundet werden und die Bedingung wäre nicht mehr erfüllt.
Aber dazu kommt es ja scheinbar nicht, s.o.

jemand nen Tipp?


Gruß



        
Bezug
Maschinengenauigkeit: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 16:41 Fr 11.04.2014
Autor: DieAcht

Hier stand nicht viel richtiges.

DieAcht

Bezug
                
Bezug
Maschinengenauigkeit: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 20:20 Fr 11.04.2014
Autor: Paivren

Hallo,

es geht sich nicht um den Code, sondern um die Frage, warum das keine Endlosschleife wird.

Nochmal meine Frage lesen, bitte (nicht böse gemeint^^).

Bezug
                        
Bezug
Maschinengenauigkeit: Antwort
Status: (Antwort) fertig Status 
Datum: 12:37 Sa 12.04.2014
Autor: leduart

Hallo
ich denke es liegt an den e+1>1 und nicht [mm] \ge1 [/mm]
Gru00 leduart

Bezug
                                
Bezug
Maschinengenauigkeit: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 12:38 So 13.04.2014
Autor: Paivren

Hey,

also nochmal meine Frage:

e=1;
while (e+1>1){
e=e/2;
}
e=2*e;

Das gibt mir den richtigen Wert von [mm] e=2^{-52}. [/mm]

Aber WARUM tut es das?
Wenn [mm] e=2^{-52} [/mm] ist, dann ist die Bedingung erfüllt.
e=e/2 --> [mm] e=2^{-53}. [/mm] Der Computer rundet nun wieder auf [mm] 2^{-52}. [/mm] Die Bedingung ist wieder erfüllt.
--> Endlosschleife!

Erst wenn [mm] e=2^{-54} [/mm] würde es auf 0 gerundet werden und 1+e>1 wäre nicht mehr erfüllt.
Aber dazu kommt es doch nicht!

Bezug
                                        
Bezug
Maschinengenauigkeit: Antwort
Status: (Antwort) fertig Status 
Datum: 14:46 So 13.04.2014
Autor: DieAcht

Hallo Paivren,


Vielleicht nochmal die komplette Definition zum Runden.

Zu einem gegebenen Gleitpunktzahlsystem [mm] F(b,t,e_{\text{min}},e_{\text{max}}) [/mm] mit gerader
Basis $b$ ist die Abbildung

      [mm] rd:\{x\in\IR:x_{\text{min}}\le|x|\le x_{\text{max}}\}\to\IR [/mm]

durch

      [mm] rd(x)=\begin{cases} \sigma*(\sum_{k=1}^{t}a_k*b^{-k})b^{e}, & \mbox{falls } a_{t+1}\le\frac{1}{2}b-1 \\ \sigma*(\sum_{k=1}^{t}a_k*b^{-k}+b^{-t})b^{e}, & \mbox{falls } a_{t+1}\ge\frac{1}{2}b \end{cases} [/mm]

für

      [mm] x=\sigma*(\sum_{k=1}^{\infty}a_k*b^{-k})b^{e} [/mm]

erklärt.

Dabei heißt $rd(x)$ der auf $t$ Stellen gerundeter Wert von $x$.

Bei dir ist die Basis 2, also sollte für

      [mm] $a_{t+1}\le [/mm] 0$

abgerundet und analog für

      [mm] $a_{t+1}\ge [/mm] 1$

aufgerundet werden.


Ich würde die Aufgabe wie folgt lösen. Es gilt:

      [mm] eps:=\frac{1}{2}b^{-t+1}. [/mm]

Wir nehmen die Dualbasis und erhalten

      [mm] eps:=\frac{1}{2}2^{-t+1}=2^{-t}. [/mm]

Wir gehen im Programm die Mantissenlänge durch und beachten
die vorgegebene Voraussetzung

      $1+eps>1$.

1: function e=eps()
2: t=1;
3: while(1+2^(-t)>1)
4: e=2^(-t);
5: t=t+1;
6: end


Das Ergebnis wird sein

      [mm] $\approx [/mm] 2.220446049250313e-16$

und dabei kannst du dir am Ende mit

      $t=t-1$

die Mantissenlänge, die 52 ist, ausgeben lassen.

Wir erhalten beide das gleiche Ergebnis, aber mein Vorgang
basiert eigentlich nur auf die vorgegebene Definition.

Jetzt beachte die letzten Schritt genauer:

e =

     1.776356839400251e-15

1+2^(-t) =

     1.000000000000001e+00


e =

     8.881784197001252e-16


1+2^(-t) =

     1.000000000000000e+00


e =

     4.440892098500626e-16


1+2^(-t) =

     1.000000000000000e+00


e =

     2.220446049250313e-16


1+2^(-t) =

     1

Jetzt gilt:

      [mm] $1+eps=1+2^{-t}=1\not>1$. [/mm]

Alles klar?


Gruß
DieAcht

Bezug
                                                
Bezug
Maschinengenauigkeit: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 15:40 So 13.04.2014
Autor: Paivren

Hallo, danke für die ausführliche Antwort!

Leider versteh ich das ganze immer noch nicht so ganz.
Da Deine Lösung und Definition so ähnlich ist, wie meine, möchte ich Dich darum bitte, das anhand meiner Notationen durchzugehen, weil es sonst ziemlich verwirrend für mich wird:

Die Rundung ist ja fast das selbe, nur das ich gleich im Dualsystem bin, oder?

[mm] rd(x)=\pm \begin{cases} (1+m_{1}2^{-1}+...+m_{52}2^{-52})2^{k}, & \mbox{für } m_{53}=0 \\ (1+m_{1}2^{-1}+...+m_{52}2^{-52} +2^{-52})2^{k}, & \mbox{für } m_{53}= 1 \end{cases} [/mm]

Das Programm ist sogar identisch (ich sehe jetzt erst, dass ich mich oben vertan habe, entschuldige bitte!)

1: function e=eps()
2: t=1;
3: while(1+2^(-t)>1)
4: e=2^(-t);
5: t=t+1;
6: end

Aber jetzt (gehen wir mal von der Darstellung mit der 2 als Basis aus):

Irgendwann ist t=52.
Abfrage: [mm] 1+2^{-52}>1? [/mm] Ja!
[mm] e=2^{-52}. [/mm]
t=53
Abfrage: [mm] 1+2^{-53}>1? [/mm] JA!
Denn [mm] 2^{-53} [/mm] wird gerundet auf [mm] 2^{-52} [/mm] (siehe Rundungsdefinition oben).
Dann wird gesetzt: [mm] e=2^{-53}. [/mm] Gerundet auf [mm] 2^{-52}. [/mm]
Dann: t=54.
Abfrage: [mm] 1+2^{-54}>1? [/mm] NEIN, denn [mm] 2^{-54} [/mm] wird auf Null gerundet.
Die Schleife wird abgebrochen.

Tatsächlich... es ist keine Endlosschleife.
Wow, mir ist das erst jetzt beim Schreiben klar geworden :D
Jetzt muss ich den Exponenten aber wieder um 1 erhöhen, da einmal bereits aufgerundet wurde.
Also [mm] 2^{-52} [/mm] ist die Genauigkeit.


So richtig?

Ich danke Dir schonmal!


Bezug
                                                        
Bezug
Maschinengenauigkeit: Antwort
Status: (Antwort) fertig Status 
Datum: 19:16 So 13.04.2014
Autor: DieAcht

Hallo Paivren,


> Hallo, danke für die ausführliche Antwort!
>  
> Leider versteh ich das ganze immer noch nicht so ganz.
>  Da Deine Lösung und Definition so ähnlich ist, wie
> meine, möchte ich Dich darum bitte, das anhand meiner
> Notationen durchzugehen, weil es sonst ziemlich verwirrend
> für mich wird:
>  
> Die Rundung ist ja fast das selbe, nur das ich gleich im
> Dualsystem bin, oder?

Ja. Ich habe es nur mal Allgemeiner geschrieben, damit du
das mit der Rundung besser verstehst.

      [mm] $rd(x)=\begin{cases} \sigma\cdot{}(\sum_{k=1}^{t}a_k\cdot{}b^{-k})b^{e}, & \mbox{falls } a_{t+1}\le\frac{1}{2}b-1 \\ \sigma\cdot{}(\sum_{k=1}^{t}a_k\cdot{}b^{-k}+b^{-t})b^{e}, & \mbox{falls } a_{t+1}\ge\frac{1}{2}b \end{cases} [/mm] $

Wenn wir zum Beispiel als Basis die 10 nehmen, dann steht
dort, dass wir für

      [mm] a_{t+1}\le\frac{1}{2}*10-1=4 [/mm]

abruden bzw. für

      [mm] a_{t+1}\ge\frac{1}{2}*10=5 [/mm]

aufrunden. Das kennst du sicher. ;-)

Da wir genau auf $t$ Stellen runden ist [mm] $a_{t+1}$ [/mm] die erste
Nachkommastelle. Dabei ist übrigens [mm] \sigma\in\{-1,1\} [/mm] oder von
mir aus [mm] \sigma\in\{+,-\} [/mm] nur das Vorzeichen.
  

> [mm]rd(x)=\pm \begin{cases} (1+m_{1}2^{-1}+...+m_{52}2^{-52})2^{k}, & \mbox{für } m_{53}=0 \\ (1+m_{1}2^{-1}+...+m_{52}2^{-52} +2^{-52})2^{k}, & \mbox{für } m_{53}= 1 \end{cases}[/mm]
>  
> Das Programm ist sogar identisch (ich sehe jetzt erst, dass
> ich mich oben vertan habe, entschuldige bitte!)
>  
> 1: function e=eps()
>  2: t=1;
>  3: while(1+2^(-t)>1)
>  4: e=2^(-t);
>  5: t=t+1;
>  6: end
>  
> Aber jetzt (gehen wir mal von der Darstellung mit der 2 als
> Basis aus):
>  
> Irgendwann ist t=52.
>  Abfrage: [mm]1+2^{-52}>1?[/mm] Ja!
>  [mm]e=2^{-52}.[/mm]
>  t=53
>  Abfrage: [mm]1+2^{-53}>1?[/mm] JA!
>  Denn [mm]2^{-53}[/mm] wird gerundet auf [mm]2^{-52}[/mm] (siehe
> Rundungsdefinition oben).
>  Dann wird gesetzt: [mm]e=2^{-53}.[/mm] Gerundet auf [mm]2^{-52}.[/mm]
>  Dann: t=54.
>  Abfrage: [mm]1+2^{-54}>1?[/mm] NEIN, denn [mm]2^{-54}[/mm] wird auf Null
> gerundet.
>  Die Schleife wird abgebrochen.
>  
> Tatsächlich... es ist keine Endlosschleife.
>  Wow, mir ist das erst jetzt beim Schreiben klar geworden
> :D

Ja. [ok]

>  Jetzt muss ich den Exponenten aber wieder um 1 erhöhen,
> da einmal bereits aufgerundet wurde.
>  Also [mm]2^{-52}[/mm] ist die Genauigkeit.

Nein, denn das Programm setzt am Ende nicht noch einmal $eps$.
Das was aber dennoch um Eins erhöht wird ist die Mantissen-
länge $t$. Falls du diese zusätzlich ausgeben willst, dann
musst du natürlich am Ende (im Code) $t=t-1$ setzen.

> So richtig?

  

> Ich danke Dir schonmal!


Gruß
DieAcht

Bezug
                                                                
Bezug
Maschinengenauigkeit: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 21:43 So 13.04.2014
Autor: Paivren

Vielen Dank für Deine Hilfe!


Gruß

Paivren

Bezug
        
Bezug
Maschinengenauigkeit: -> Informatik
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 13:13 Sa 12.04.2014
Autor: Diophant

Hallo,

> es gibt leider keinen passenden Unterpunkt für dieses
> Thema;
> ich wollte es aber trotzdem hier posten, und nicht im
> Informatikbereich, da dort vielleicht anders an das Thema
> herangetreten wird.

warum sollte es das? Wie die Antwort ausfällt, hängt doch allein von deiner Frage und den Kenntnissen der Antwortenden ab, da spielt es keine Rolle, wo ein Thread eingeordnet ist.

Ich habe daher deinen Thread nach Informatik verschoben, da dort inhaltlich hingehört (und das ist hier bei uns das Kriterium für die Einordnung).

Gruß, Diophant

Bezug
        
Bezug
Maschinengenauigkeit: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 15:19 Sa 12.04.2014
Autor: DieAcht

Hallo,


Dieses Thema ist in der Regel das erste Thema in der Numerik
Vorlesung. Normalerweise berechnet man dann auch [mm] x_{\text{min}} [/mm] und [mm] x_{\text{max}}. [/mm]

Ich habe erst heute Abend Zeit mir meine Unterlagen dazu an-
zugucken, aber ich kann mich gut erinnern, dass die Aufgabe
anders zu lösen war. Soweit ich mich erinnere musste man die
Mantissenlänge vergrößern bis die Voraussetzung nicht mehr
gegeben ist. Der Witz an der Sache war, dass das Ergebnis
gleich war und soweit ich mich erinnere liegt es daran, dass
es das normalisierte- und denormalisierte Gleitpunktzahl-
system gibt. Das musste man dann auch beachten bei der Be-
rechnung von [mm] x_{\text{min}} [/mm] und [mm] x_{\text{max}}. [/mm]


Gruß
DieAcht

Bezug
                
Bezug
Maschinengenauigkeit: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 19:58 Sa 12.04.2014
Autor: Diophant

Hallo DieAcht,

danke für deine Anmerkungen. Ich habe den Thread daraufhin wieder zurück ins Numerik-Forum verschoben. Sorry an den Themenstarter für meinen Denkfehler.

Gruß, Diophant

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Uni-Numerik"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.englischraum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]