Anfängerfrage zur Variablen



  • Hallo zusammen,

    ich hoffe Ihr könnt mir helfen.

    ich möchte eine Funktion z.B. y=4*x^2 in Schritten von 0.1 von -1 bis 1 ausgeben.

    als Variablentyp definiere ich double.

    Das Problem ist, dass für x=0 bzw. dann y=0 irgendwein e - Wert ausgegeben wird.
    Warum wird hier keine = ausgegeben ?

    Komme nicht weiter damit. Wäre für einen Rat sehr dankbar.



  • Mit C:

    double x;
    printf("  x     y\n");
    for(x = -1; x < 1.05; x += 0.1)
        printf("%4.1lf  %.2lf\n", x, 4 * x * x);
    


  • Danke , aber was ich nicht checke, ist warum !



  • Die Ergebniss werden so zwar richtig ausgegeben, aber nur, weil die Zahlen gerundet werden. Ich hab bei dem Prob die gleichen Ungenauigkeiten drin, würd mich auch mal interessieren, wo die herkommen..



  • Ich denke, das mit den e-Zahlen ist keine Ungenauigtkeit.
    Wenn da z.B. steht:
    4.4 e-2 oder so meint er:
    0.044
    Aber, wenn du potenzieren willst, dann ist das das falsche Zeichen dafür: ^
    das ist der xor Operator.
    Wenn du mit dezimalzahlen potenzieren willst, musst du die F8unction hier nehmen, glaub ich:
    pow(x,y)
    oder so ähnlcih,. ist definiert in math.h, denk ich, hab ich schomn lange nicht mehr benutzt.

    Gruß, Maxi



  • ich möchte eine Funktion z.B. y=4*x^2 in Schritten von 0.1 von -1 bis 1 ausgeben.
    ...
    Das Problem ist, dass für x=0 bzw. dann y=0 irgendwein e - Wert ausgegeben wird.

    Der Manipulator fixed behebt dein Problem:

    for (double x = -1 ; x <= 1 ; x += 0.1)
    {
        // pow ist hier natürlich brutaler Overkill
        double y = 4 * pow(x, 2);
        cout << "(" << fixed << x << ", " << fixed << y << ")\n";
    }
    


  • Original erstellt von erwin1:
    Danke , aber was ich nicht checke, ist warum !

    Weil die 0.1 als double nicht exakt darstellbar ist. Damit werden alle daraus berechneten Ergebnisse etwas ungenau.

    Z. B. ist -1 + 1/3 + 1/3 + 1/3 == 0, aber -1 + 0.333 + 0.333 + 0.333 == -0.001. Im Binärsystem ist 1/10 genau so periodisch wie im Dezimalsystem 1/3.


Anmelden zum Antworten