Hilfe beim nachvollziehen vom komischen floats Rundungen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
tony_pythony
User
Beiträge: 14
Registriert: Sonntag 9. August 2020, 12:23

@Sirius3:
Wenn man die Liste der Links-assoziativen Programme anschaut, dann sind das Excel und Matlab. Beide bekannt für kreative Interpretation von Mathematik.
Nichts gegen Excel :D immerhin hat Microsoft ein Blog-Artikel geschrieben, dass es in Excel auch zu Problemen kommen kann, wenn sehr große oder sehr kleine Gleitkommazahlen verwendet werden hahah Aber PostGres oder GNU Octave sind schon anders als Excel.
Es ist gute Praxis, dass wenn etwas schief geht, eine Exception geworfen wird
Das berücksichtige ich auch. Hier ist zum Beispiel meine floor():

Code: Alles auswählen

def floor(x):
    x = x.real if x.imag == 0 else x.imag     #  if x < 2**(-1024) while nested, use imag-part 
    try:
        if x - int(x) < 0:
            return int(x) - 1
        else:
            return int(x)
    except ValueError:                                 # handle nans
        return np.nan
    except OverflowError:                           # handle overflow while nested, x <0 = -inf, x > 0 = +inf
        return -np.inf if x < 0 else np.inf
    return math.floor(x.real)
Wenn die Regeln nicht bekannt sind, dann ist das so gut wie keine Regel.
Was aber nicht bedeutet, dass "wenn es so gut wie keine Regel ist" es keine Regeln gibt und alles gemacht werden kann :) Muss mich da jetzt durchbeissen und mit try & error die Regeln brute-forcen. Zum Glück ist das Verhalten deterministisch und keine Halswender-Tricks sind ersichtlich.. (zum beispiel könnten double floats als Ersatz für bigINT herangezogen werden, um "kostenlos" und huckepack bigINT zu *nutzen*.. Halswender-Trick! -> https://stackoverflow.com/questions/184 ... n-a-double Antwort des Users "RARE Kpop Manifesto". In Python existiert dieses Problem ja fast gar nicht dank der Implemetierung des int(). Habe aber ein kompiliertes C++ Programm, ob das nun bigINT nutzt?? Mit try & error: Tut es nicht. :)
Sirius3
User
Beiträge: 18250
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn Du eh schon numpy verwendest, warum dann nicht bei den Funktionen, bei denen Du nans und inf haben willst?
Also

Code: Alles auswählen

def floor(x):
    return np.floor(x.imag or x.real)
was auch immer die komische Definition mit dem Imagenärteil sein soll. Sieht eher so aus, als ob Du einen Fehler an einer anderen Stelle hier korrigieren möchtest.

Und wie schon öfter geschrieben, wenn Du ein Problem damit hast, dass die letzte gerundete Ziffer relevant ist, dann darfst Du kein float benutzen.
Antworten