La libreria GNU C ha la funzione drem
(alias remainder
).Come posso simulare la funzione drem/remainder di GNU C Library nel runtime di Python 2.7 di Google App Engine?
Come posso simulare questa funzione utilizzando solo il modules supportato dal runtime di Python 2.7 di Google App Engine?
Dal GNU manual per drem
:
Queste funzioni sono come
fmod
tranne che completano il quoziente n interna all'intero più vicino anziché verso zero a un numero intero. Ad esempio, drem (6.5, 2.3) restituisce -0.4, che è 6.5 meno 6.9.
Dal GNU manual per fmod
:
Queste funzioni calcolare il resto della divisione di numeratore per denominatore. In particolare, il valore restituito è numeratore - n * denominatore, dove n è il quoziente del numeratore diviso per denominatore, arrotondato a zero a un numero intero. Quindi, fmod (6.5, 2.3) restituisce 1.9, che è 6.5 meno 4.6.
Leggendo la documentazione il seguente codice Python dovrebbe funzionare:
def drem(x, y):
n = round(x/y)
return x - n * y
Tuttavia con Python, drem(1.0, 2.0) == -1.0
e con C drem(1.0, 2.0) == 1.0
. Nota Python restituisce negativo e C restituisce positivo. Questa è quasi certamente una differenza interna nei carri di arrotondamento. Per quanto posso dire entrambe le funzioni eseguono lo stesso altrimenti dove i parametri 2 * x != y
.
Come posso fare in modo che la mia funzione Python drem
funzioni allo stesso modo del suo equivalente C?
Vorrei aggiungere che posso usare solo il [supportato Python moduli] (https://developers.google.com/appengine/kb/libraries) disponibile in Google App Engine. – Dan
'' numpy.round() 'invece di' round() 'sembra funzionare per il mio esempio ma sarei grato di sapere se ci sono casi limite con questo. – Dan
Vorrei ** amare ** non avere dipendenza da Numpy solo per la sua funzione 'round' quindi la domanda rimane valida. – Dan