Python: Warum akzeptieren Funktionen im Mathematikmodul Dezimalobjekte als Argumente?

8

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.

    
Ryan Stephen 06.04.2013, 02:52
quelle

1 Antwort

7

Wenn ich mir die math module.c anschaue, habe ich Folgendes bekommen:

%Vor%

Betrachtet man den Code, verwendet er tatsächlich float ( PyFloat_AsDouble )

Wieder dasselbe für exp ,

%Vor%     
enginefree 06.04.2013, 03:44
quelle

Tags und Links