Sinceramente, ogni funzione del modulo matematico di Python sembra funzionare perfettamente con gli oggetti decimali. Ad esempio: frexp, exp, cos.Python: perché le funzioni nel modulo matematico accettano gli oggetti decimali come argomenti?
Quando si digita print(math.frexp(decimal.Decimal('2341.12412')))
, Python stampa la risposta corretta, ovvero (0.57156... , 12)
, e non genera eccezioni.
Suppongo che il modulo matematico venga scritto in C di basso livello, facendo affidamento il più possibile sulle operazioni matematiche hardware per l'efficienza. Quindi ... perché dovrebbe funzionare per gli oggetti decimali?
Hanno inserito un controllo di tipo nelle funzioni matematiche e passare a un'implementazione diversa se l'argomento è un decimale? Non ho visto nulla di simile menzionato nei documenti. Potrebbe anche essere che il decimale viene automaticamente convertito in un float, ma anche questo non ha alcun senso.
Sì, sono confuso.
Presuambly, sono stati convertiti in galleggianti. – Antimony
Estendere le funzioni dell'oggetto 'Decimale' e vedere cosa viene chiamato quando lo si passa. –
L'ho appena provato. Ho esteso la classe Decimal e ho annullato le funzioni \ _ \ _ add__ e \ _ \ _ multiply__ per stampare un messaggio e chiamare la funzione decimale equivalente. Finora, sembra che nessuna delle funzioni matematiche stia chiamando \ _ \ _ add__ o \ _ \ _ multiply__, perché i messaggi non vengono stampati quando li chiamo (exp, frexp, ecc.). Probabilmente il Decimale viene convertito in un float ... –