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

Falsches Ergebnis bei if else Anweisung (Variablenvergleich)

 

Hans-Peter

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.01.2011, 15:31     Titel: Falsches Ergebnis bei if else Anweisung (Variablenvergleich)
  Antworten mit Zitat      
Hallo,

ich bin über folgende Problematik gestoßen und formuliere es mal ganz allgemein:

Ich habe zwei Aufgaben. Jedes Ergebnis wird einer Variablen zugeordnet (Ergebnis1 und Ergebnis2). Jetzt sollen beide Variablen verglichen werden und je nachdem welcher Vergleich richtig ist, wird das Resultat im Command Window angezeigt.

Hier der Quelltext:

Code:

    Ergebnis1 = .1*16 + .3*14 + .15*18 + .3*22 + .15*24
    Ergebnis2 = .1*22 + .3*20 + .15*18 + .3*18 + .15*16
    if Ergebnis1 == Ergebnis2
        disp('Beides gleich')
    elseif Ergebnis1 < Ergebnis2
        disp('Ergebnis 1 < Ergebnis 2')
    elseif Ergebnis1 > Ergebnis2
        disp('Ergebnis 1 > Ergebnis 2')
    else
        disp('Alles falsch')
    end
 


Bei mir (Matlab 2010b) erscheint "Ergebnis 1 > Ergebnis 2", obwohl beide Ergebnisse exakt gleich sind. Wie kann das sein? Und welche Alternativen gibt es für diesen Vergleich?

Schonmal vielen Dank für die Hilfe!!!


_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 11.01.2011, 15:38     Titel:
  Antworten mit Zitat      
Hallo Hans-Peter,
Matlab zeigt dir zwar an, dass beide Werte gleich sind, rechnet aber intern mit dem exakten Wert weiter.

Code:

>> Ergebnis1 = .1*16 + .3*14 + .15*18 + .3*22 + .15*24

Ergebnis1 =

   18.7000

>> Ergebnis2 = .1*22 + .3*20 + .15*18 + .3*18 + .15*16

Ergebnis2 =

   18.7000

>> format('long')
>> Ergebnis1 = .1*16 + .3*14 + .15*18 + .3*22 + .15*24

Ergebnis1 =

  18.699999999999999

>> Ergebnis2 = .1*22 + .3*20 + .15*18 + .3*18 + .15*16

Ergebnis2 =

  18.699999999999996
 

_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Hans-Peter

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.01.2011, 16:09     Titel:
  Antworten mit Zitat      
Hallo Peter,

vielen Dank für die schnelle Antwort. Ich weiß zwar nicht was es mit dem "exakten" Wert gemeint ist (weil mit dem Taschenrechner wird auch 18.7 angezeigt) ... aber wie kann ich dieses Problem denn am besten umgehen, denn für die if-else-Anweisung benötige ich den Vergleich mit dem "normalem" Ergebnis ... also wie kann unterdrücken(?), dass Matlab mit seiner Interpretation der Rechnung die Werte vergleicht??

Hast du dafür vielleicht einen Vorschlag?
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 11.01.2011, 17:09     Titel:
  Antworten mit Zitat      
Matlab rechnet bei float Wert mit einer Toleranz. (Wie die inneren Zusammenhänge dabei sind kann ich dir leider nicht sagen)

Wie du an meinem Code oben siehst, bekommst du alle (15) Stellen angezeigt mit dem Befehl
Code:


Abhilfe würde das runden schaffen.
Beispielsweise:
Code:

    Ergebnis1 = round((.1*16 + .3*14 + .15*18 + .3*22 + .15*24)*100)/100
    Ergebnis2 = round((.1*22 + .3*20 + .15*18 + .3*18 + .15*16)*100)/100
    if Ergebnis1 == Ergebnis2
        disp('Beides gleich')
    elseif Ergebnis1 < Ergebnis2
        disp('Ergebnis 1 < Ergebnis 2')
    elseif Ergebnis1 > Ergebnis2
        disp('Ergebnis 1 > Ergebnis 2')
    else
        disp('Alles falsch')
    end
 


die '100' bestimmen auf wieviele Nachkommastellen gerundet werden soll, weil der Befehl 'round' auf den nächsten Integer Wert rundet.
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Hans-Peter

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.01.2011, 17:12     Titel:
  Antworten mit Zitat      
Vielen Dank!!! Das hat super geklappt.
 
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.