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

Vergleich zweier Zahlen

 

Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2009, 11:42     Titel: Vergleich zweier Zahlen
  Antworten mit Zitat      
Hallo,

ich habe ein wahrscheinlich relativ einfaches Problem. Ich berechne innerhalb von For-Schleifen 2 Zahlen und möchte diese mit Hilfe einer IF-Abfrage vergleichen. Hierzu ein kleines Beispiel:

Code:

for a=0:99
    for b=0:99
        R = b + a/100 - 5/100;
        L = 2*(a + b/100);
        if (R==L)
            disp('gib was uas')
            p=5
        end
    end
end
 


Für a=31 und b=63 sollte die Bedingung erfüllt sein, jedoch gibt Matlab nichts aus.
Vielen Dank für eure Antwort.

Grüße


tompie
Forum-Guru

Forum-Guru


Beiträge: 260
Anmeldedatum: 19.09.07
Wohnort: München
Version: immer alles
     Beitrag Verfasst am: 12.11.2009, 12:30     Titel:
  Antworten mit Zitat      
Hallo,

das ist das bekannte Rundungsproblem. Wenn Du den Vergleich direkt programmierst mit R==L, wirst Du mit ziemlich jeder Programmiersprache dieser Welt dasselbe Problem bekommen, denn für a = 31 und b = 63 erhält man

Code:
R-L = 7.1054e-015


Man kann das Problem lösen, wenn man den Vergleich z.B. als

Code:


formuliert.

Das ist kein Matlab-spezifisches Problem, sondern ein prinzipielles.

Gruß tompie
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 12.11.2009, 12:54     Titel:
  Antworten mit Zitat      
Hier noch ein wenig Theorie dazu:

http://www.mathworks.com/support/so.....1-16FOQ/?solution=1-16FOQ

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2009, 13:20     Titel:
  Antworten mit Zitat      
Vielen Dank für die Antwort...hät ich auch selbst drauf kommen können.
Ich hab mir da jetzt ein wenig anderst beholfen, indem ich beide Berechnungen auf Integer-Basis durchführe und somit Gleitkommazahlrundung vermeide:

Code:

for a=0:99
    for b=0:99
        R = 100*b + a - 5;
        L = 2*(100*a + b);
        if (R==L)
            disp('gib was aus')
        end
    end
end
 


Grüße
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 12.11.2009, 14:24     Titel:
  Antworten mit Zitat      
In diesem Beispiel sind die Variablen immer noch DOUBLE. Integer werden sie nur durch Arbeiten mit UINT8 isw.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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.