WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

NewbieHilfe: Skript "Ab wann ist n = n+1" (double

 

Klötzchen

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.10.2015, 16:06     Titel: NewbieHilfe: Skript "Ab wann ist n = n+1" (double
  Antworten mit Zitat      
Hallo,

Ich habe Matlab (nach einigen Komplikationen mit meinem Linuxrechner) heute aufgrund meiner Hochschule istalliert. Leider habe ich so gut wie keinerlei Vorerfahrungen beim Programmieren.

Ich soll bis Montag diese Aufgabe lösen und bin ehrlich gesagt etwas ratlos, wie ich das anfangen soll.

Code:

[b]Aufgabe:[/b]

Schreiben Sie ein MatLab-Skript zur Bestimmung der kleinsten natürlichen Zahl n, für die n und n+1 die gleiche Darstellung mit dem double-Datentyp besitzen (und daher nich unterschieden werden können).



Durch einige Recherchen bin ich inzwischen so weit, dass ich mir von Matlab zwei Zahlen vergleichen lassen kann und es mir per Textausgabe sagt, ob die Zahlen identisch sind oder nicht.

if x == y
    disp ('Zahlen sind identisch')
else
    disp ('Zahlen weichen von einander ab')
end


Aber ich kann ja jetzt nicht jede einzelne Zahl durchprobieren um den Grenzwert herauszufinden.
Immerhin bin ich durch probieren schon so weit gekommen, dass ich weiß, dass mein gesuchter Grenzwert irgendwo zwischen 10^15; und 10^16; liegt.
Ich habe zwar herausgefunden, wie ich Zahlenreihen erstellen kann, aber für diesen Bereich sagt mir Matlab nur, dass es zu viele Zahlen sind...


Kann mir jemand einen Tipp geben, wie ich dieses Problem lösen kann bzw. wie ich jetzt weiter komme?

Ich bin wirklich für jede Hilfe dankbar!


Liebe Grüße,
Klötzchen (das irgendwie auf der Leitung steht...)


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.10.2015, 16:20     Titel:
  Antworten mit Zitat      
Hallo,

denk doch mal dran, dass ein Rechner im Binärsystem arbeitet. Es wird also einen Punkt geben, in dem 2^n und 2^n - 1 noch unterscheidbar sind, 2^n und 2^n + 1 aber nicht mehr. Du brauchst also nur diese Kombinationen durchzutesten.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Klötzchen

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.10.2015, 08:57     Titel:
  Antworten mit Zitat      
Hallo Harald,

Danke erstmal für deine schnelle Antwort. Gibt es denn irgendeine andere Möglichkeit als durchprobieren und abfragen um auf den richtigen Wert zu kommen?

Wir solen ja ein Skript abgeben, von daher bin ich ziemlich sicher, dass "Ich habe so lange probiert bis ..." nicht wirklich als Antwort zählen wird.

Wie gesagt, der Logik folgend hätte ich jetzt versucht diese beiden Bedingungen (also n+1 kann nicht mehr unterschieden werden, n-1 aber noch) mit Hilfe einer Zahlenreihe herauszufinden.

Aber der Zahlenbereich den ich durch probieren und raten herausgefunden habe ist für Matlab einfach noch zu groß... :/
(Siehe mein erster Beitrag)
Gibt es da noch irgendeinen Trick oder eine Möglichkeit, dass er die Zahlen durch einen gewissen (mir unbekannten) Befehl selbstständig einsetzt und durchprobiert?
Oder muss ich das ganze im Zweifelsfall durch mehrere kleinere Zahlenreihen bewerkstelligen?

Da liegt eigentlich mein Hauptproblem. Ich weiß nicht ganz wie ich dem Programm erklären soll was ich will Very Happy

Liebe Grüße!
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.10.2015, 10:04     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Wir solen ja ein Skript abgeben, von daher bin ich ziemlich sicher, dass "Ich habe so lange probiert bis ..." nicht wirklich als Antwort zählen wird.

Die Idee ist ja auch, durchprobieren zu lassen statt durchprobieren ;)
Also nicht händisch die zu überprüfenden Zahlen einzugeben, sondern MATLAB dies automatisch machen zu lassen. Da bietet sich z.B. eine while -Schleife an.

Zitat:
Aber der Zahlenbereich den ich durch probieren und raten herausgefunden habe ist für Matlab einfach noch zu groß

Wie du die Anzahl der durchzuprobierenden Zahlen stark einschränken kannst, habe ich dir ja gesagt: du brauchst bloß die 2er-Potenzen durchzuprobieren.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Klötzchen

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.10.2015, 14:53     Titel:
  Antworten mit Zitat      
Danke Harald für deine Hilfe!

Ich habe so tatsächlich das passende Ergebnis gefunden.

Allerdings muss ich zugeben, dass ich keine Ahnung habe, warum ich so rechnen darf...


% Aufgabe 2-4.)
% Schreiben Sie ein MatLab-Skript zur Bestimmung der kleinsten natürlichen
% Zahl n , für die n und n+1 die gleiche Darstellung mit dem double -Datentyp
% besitzen (und daher nicht unterschieden werden können).


n = 0;

while 2^n ~= 2^(n)+1
    n =n+1;
end
disp ('n=')
disp (n)


if 2^n == (2^n)+1
    disp ('2^53 ist laut Matlab das Selbe wie (2^53)+1')
end
if 2^n ~= (2^n)-1
    disp ('2^53 kann von Matlab von (2^53)-1 unterschieden werden')


Aber wieso stimmt dieses Ergebnis? Embarassed
Wie gesasgt, ich habe leider keinerlei Vorkenntnisse und bin darum diesbezüglich ein wenig überfragt.

Klar, ein Computer arbeitet binär, also nur mit zwei verschiedenen Operanten. Aber wie man davon jetzt auf den Rechenweg schließen kann ist mir ehrlich gesagt genauso schlüssig wie eine chinesische Tageszeitung...


Es wäre super wenn du mir das vielleicht nochmal erklären könntest! Very Happy


Liebe Grüße,
das Klötzchen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 11.10.2015, 15:43     Titel:
  Antworten mit Zitat      
vielleicht hilft dir das ja beim verständniss
Floating-Point Numbers
IEEE 754
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.