Problem bei Abfrage

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Problem bei Abfrage

    Moin.
    Ich möchte ein paar Zahlen überprüfen. Nun sollte das Programm ne Ausgabe machen bei 1 doch das tut es nicht wenn ich die Schritte im 0.1 Bereich mache bei 0.2 schon.

    C-Quellcode

    1. #include <math.h>
    2. #include <stdio.h>
    3. int main (int argc, char *argv[]){
    4. double Wert = 0.1; // 0.2
    5. double zwischenwert = 0;
    6. double Xo = 0.0,X1;
    7. int i = 0;
    8. X1 = Xo;
    9. do{
    10. zwischenwert = sin((3.1415926535898/2) * X1);
    11. if( zwischenwert == X1 ){
    12. printf("Fixpunkt: %lf\n",X1);
    13. }
    14. if( ((-1) * zwischenwert) == ((-1) * X1) ){
    15. printf("Fixpunkt: %lf\n",((-1) * zwischenwert));
    16. }
    17. i++;
    18. X1 = X1 + Wert;
    19. }while(i <= 100000);
    20. }
    Alles anzeigen

    Kann mir jemand sagen warum das Programm bei 0.1 kein Fixpunkt anzeigt aber bei 0.2 . Nach dem Hochzählen.
    mfg
    http://spielwelt14.monstersgame.net/?ac=vid&amp;vid=28103555
  • Das ist ein allgemeines Problem über die Gleichheit von Float.
    Ein sehr guter Artikel steht hier

    Die Grundaussage ist, das man nicht "double == double" sagen soll, sondern

    Quellcode

    1. #include <limits>
    2. using namespace std;
    3. ...
    4. if ((double - double) <= numeric_limits<double>::epsilon())
    5. {
    6. // Identisch!
    7. }


    Um das ganze leichter verständlich zu machen, probier das folgende Mal mit ints falls du dir nicht sicher bist:

    Quellcode

    1. int i = 67, j = 67;
    2. if (i == j) { ... }
    3. if (!(i - j)) { ... }
    4. if ((i - j) == 0) { ... }


    Und das Epsilon gibt an, wie groß die Differenz sein darf (e.g. 10^-6)