Bizzarely, scheint jede Funktion von Pythons Mathematik-Modul gut mit Dezimal-Objekten zu funktionieren. Zum Beispiel: frexp, exp, cos.
Wenn ich print(math.frexp(decimal.Decimal('2341.12412')))
eintippe, druckt Python die richtige Antwort, nämlich (0.57156... , 12)
, und wirft keine Ausnahmen.
Ich würde annehmen, dass das Mathematikmodul in Low-Level-C geschrieben werden würde, wobei man sich so stark wie möglich auf Hardware-Rechenoperationen aus Effizienzgründen verlassen würde. Also ... warum würde es für Dezimalobjekte funktionieren?
Haben sie eine Typprüfung in die mathematischen Funktionen eingefügt und wechseln zu einer anderen Implementierung, wenn das Argument ein Dezimalzeichen ist? So etwas habe ich in den Unterlagen nicht gesehen. Es könnte auch sein, dass das Dezimale automatisch in ein Float umgewandelt wird, aber das macht auch keinen Sinn.
Ja, ich bin verwirrt.
Wenn ich mir die math module.c
anschaue, habe ich Folgendes bekommen:
Betrachtet man den Code, verwendet er tatsächlich float
( PyFloat_AsDouble
)
Wieder dasselbe für exp
,