• # En python - mise en boite des nombres

    Posté par . En réponse au journal Un décalage de 64 bits, ça vous inspire comment ?. Évalué à 8.

    En fait Python ne va pas déléguer l'opération directement au processeur comme d'autre langage, car il fait du "boxing", c'est à dire il ne permet pas à un nombre de déborder, mais gère des nombres aléatoirement grand.

    J'ai pu utiliser ça il y a pas longtemps pour comparer des vecteurs de grandes tailles, et approximer un log likehood par un xor (ça marchait car je comparais deux vecteurs pour des valeurs oui/non, donc binaire). En gros je devais compter les faux positifs et faux négatifs (donc là où j'avais 1 quand j'aurais du avoir 0, et 0 quand j'aurais du avoir 1, ce que xor peut permettre de compter).
    Je me suis aperçu que malgré la "mise en boite" (et donc pas mal de calculs en plus de la part de python), le xor restait assez rapide même sur de très grand nombres (de 500 000 chiffres).

    In [5]: import random
    In [7]: x = int("".join(random.choice(["0", "1"]) for i in range(500000)), 2)
    In [8]: y = int("".join(random.choice(["0", "1"]) for i in range(500000)), 2)
    In [9]: %timeit x ^ y
    The slowest run took 10.90 times longer than the fastest. This could mean that an intermediate result is being cached.
    100000 loops, best of 3: 8.94 μs per loop

    Je pense que le premier essais est plus long à cause des chargement de la mémoire (pour les deux autres itérations, le cache du processeur joue).