Bizzarely, scheint jede Funktion von Python-Mathematik-Modul gut mit Dezimal-Objekten funktionieren. Zum Beispiel: frexp, exp, cos. Wenn ich print(math.frexp(decimal.Decimal('2341.12412')))
tippe, druckt Python die richtige Antwort, die (0.57156... , 12)
ist, und wirft keine Ausnahmen.Python: Warum akzeptieren Funktionen im Mathematikmodul Dezimalobjekte als Argumente?
Ich würde annehmen, dass das Mathematik-Modul in Low-Level-C geschrieben werden würde, so stark wie möglich auf Hardware-Mathematik-Operationen für die Effizienz verlassen. 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 einen Float umgewandelt wird, aber das macht auch keinen Sinn.
Ja, ich bin verwirrt.
Zuvor werden sie zu Schwimmern umgebaut. – Antimony
Erweitern Sie die Funktionen des "Decimal" -Objekts und sehen Sie, wie es aufgerufen wird, wenn Sie es übergeben. –
Ich habe das gerade jetzt versucht. Ich habe die Decimal-Klasse erweitert und die Funktionen \ _ \ _ add__ und \ _ \ _multiple__ überschrieben, um eine Nachricht zu drucken und die entsprechende Dezimalfunktion aufzurufen. Bisher scheint es so, als ob keine der mathematischen Funktionen \ _ \ _ add__ oder \ _ \ _ multiply__ aufruft, weil die Nachrichten nicht gedruckt werden, wenn ich sie anrufe (exp, frexp, etc). Wahrscheinlich wird die Dezimalzahl in eine Gleitkommazahl umgewandelt ... –