Gleitkomma Arithmetik



  • Hi,

    ich verwenden folgende Funktion um Funktionswerte zu berechnen.
    Allerding wenn ich jetzt als Parameter z.b. (-20,20,0.1) übergebe,
    zählt er nicht sauber hoch, sprich -19.9 , -19.8 usw., sondern -19.8999999999 , -19.80000000001 usw.

    Kennt jemand eine Moglichkeit das er die Laufvariable i "mahtematich korrekt" hochzählt?

    std::vector<punkt> funktion::werte(double von, double bis, double step) {
    	std::vector<punkt>W;
    
    	for (double i = von; i <= bis; i += step) {
    		W.push_back(punkt(i, at(i)));
    	}
    
            return W;
    }
    


  • 0.1 ist binär nicht exakt darstellbar. Versuche es mal mit 0.125, oder besser noch: nur integrale Typen für Laufvariablen verwenden.



  • Runden

    Festkommaarithmetik bzw.
    Ganzzahlen

    Keinen step sondern amount (Anzahl der Zwischenschritte angeben)
    Rechne den neuen Wert per Multiplikation aus, so vermeidest du Folgefehler.


Anmelden zum Antworten