Warum geht diese Schleife nicht?

Gast #2549735
50 ist nicht definiert, aber das nur so nebenbei.

So wie dein Code ist, kannst du es unmöglich kompilieren. Lade doch mal 
den vollständigen Code hoch.
#2549755
Markus Breitmann schrieb:
> [snip]
> double wert = 0
>
> // eingies an Rechenzeug
>
> if(wert<50)
>  {
>    [snip]
>  }
>
>
>  if(wert>50)
>  {
>    [snip]
>  }
>
>  if(wert==0)
>   [snip]
>
> }
> [snip]
>
> Egal was ich mache, er läuft nie in das wert==0 rein...
> Auf dem papier nachgerechnet kommt aber genau 0 raus!

Da 0 auch kleiner als 50 ist springt er auch gleich in die erste 
Bedingung..

nitraM
Gast #2549772
> Da 0 auch kleiner als 50 ist springt er auch gleich in die erste
> Bedingung..
>
> nitraM

Und muss trotzdem in die 3. Bedingung springen.
Das ist nicht das Problem.


Peter II hat recht:
> bei double kann statt 0 auch 0.0000000001 rauskommen, double werte
>
> vergleicht man nie mit ==.

Das ist das Problem.

Gruß JensM
Moderator (Firma: Titel) Persönliche Seite #2549774
Martin L. schrieb:
> Da 0 auch kleiner als 50 ist springt er auch gleich in die erste
> Bedingung..
Aber er sollte da auch wieder rauskommen...
Die Lösung (was ist Null?) wurde schon genannt.

Probiers mal so:
1
double wert = 0
2

3
// eingies an Rechenzeug
4

5
 if(wert<50)
6
 {
7
     ....
8
 }
9

10

11
 if(wert>50)
12
 {
13
     .....
14
 }
15

16
 if((int)wert==0)
17
  ....

Stefan schrieb:
> 50 ist nicht definiert, aber das nur so nebenbei.
Das ist auch nicht so arg schlimm, weil es (wie die Null) so gut wie nie 
auftreten wird. Es gibt ja 49,999999999 und 50,00000000001

>>>>> Warum geht diese Schleife nicht?
http://www.if-schleife.de
Gast #2549776
> Auf dem papier nachgerechnet kommt aber genau 0 raus!
  ^^^^^^^^^^^^^^                          ^^^^^^^

..aber eben nur auf dem Papier. Für den Rechner kommt aufgrund von 
Rundungsfehlern was anderes raus. Wenn du auf '0' untersuchen willst, 
dann definier Dir ein ε und vergleich auf 'liegt im Intervall [-ε, ε]'.

HTH
Gast #2549802
das sind die Momente, in denen man weiß warum man sich mit NumMath 
rumgeplagt hat.
Float kennt (nur in Ausnahmefällen) exakte Zahlenwerte. Der Wert 0 ist 
zwar als BitMuster vorgesehen, aber nur wenn man ihn aus direkt 
zugwiesen hat. Wird er errechnet, dann wird er oft nicht erreicht, 
sondern nur angenähert. Wobei in der realen Welt (Meß-)Werte mit mehr 
als 3 signifikanten (Dezimal)-Stellen die Rechnung nur zeigen, daß der 
der sie aufschreibt, noch nie was von (Meß-)Fehlern gehört hat.
#2550097
Hi,

also generell würde ich auch alle variablen als "unsigned" anlegen, 
außer du brauchst sie mit vorzeichen. Das minimiert meiner meinung nach 
schonmal enorm fehlerquellen.

außerdem musst du berücksichtigen, dass bei einer 0 zwei sachen 
hintereinander aufgerufen werden.Ist das so gewollt?

Gruß Tarkan
#2550602
Tarkan D. schrieb:
> also generell würde ich auch alle variablen als "unsigned" anlegen,
> außer du brauchst sie mit vorzeichen. Das minimiert meiner meinung nach
> schonmal enorm fehlerquellen.

Genau das Gegenteil der Fall.

verrechnet man unsiged mit irgendwelchen signeds, werden automatisch 
alle signeds in unsigneds umgecastet.
Was dabei rauskommt, wenn man negative Zahlen hat, kann man sich leicht 
vorstellen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.