J'ai remarque que les operateurs >> ou << ne se comportent pas comme en
C ou en PHP, je pense a cause du fait que les Integer se transforment
automatiquement en Long.
Ce la me pose pas mal de problemes et je ne me sens pas de m'attaquer
aux classes avec surcharge des op=E9rateurs (avec des exceptions
associ=E9es pour g=E9rer les overflows).
Bref, si quelqu'un connait une solution simple pour que mes a << b
aient la meme valeur en python qu'en C ca serait super..
Bref, si quelqu'un connait une solution simple pour que mes a << b aient la meme valeur en python qu'en C ca serait super..
J'émets des doutes sur l'utilité de réobtenir le comportement du C :
int x = 16; // 0x10 int y = x << 40; // 0 sur une machine 32 bits (où sont les avertissements ?)
x = 16 x << 40 __main__:1: FutureWarning: x<<y losing bits or changing sign will return
a long in Python 2.4 and up 0
x + 0L << 40 17592186044416L
long(x) << 44 281474976710656L
Franchement, il n'y a pas photo.
Cordialement.
FB
Certes, mais avec Python 2.4.2 on a meme pas le droit a un avertissement et au lieu d'avoir par exemple :
5597564875 >> 13 = 159008
on obtient :
5597564875 >> 13 = 683296L
Il n'y a pas photo c'est vrai, mais comme j'utilise cet operateur dans un calcul de checksum c'est assez embetant car ce genre de calcul tolere mal les approximations :)
Certes, mais avec Python 2.4.2 on a meme pas le droit a un
avertissement et au lieu d'avoir par exemple :
5597564875 >> 13 = 159008
on obtient :
5597564875 >> 13 = 683296L
Il n'y a pas photo c'est vrai, mais comme j'utilise cet operateur dans
un calcul de checksum c'est assez embetant car ce genre de calcul
tolere mal les approximations :)
Certes, mais avec Python 2.4.2 on a meme pas le droit a un avertissement et au lieu d'avoir par exemple :
5597564875 >> 13 = 159008
on obtient :
5597564875 >> 13 = 683296L
Il n'y a pas photo c'est vrai, mais comme j'utilise cet operateur dans un calcul de checksum c'est assez embetant car ce genre de calcul tolere mal les approximations :)
Christophe
Certes, mais avec Python 2.4.2 on a meme pas le droit a un avertissement et au lieu d'avoir par exemple :
5597564875 >> 13 = 159008
on obtient :
5597564875 >> 13 = 683296L
Il n'y a pas photo c'est vrai, mais comme j'utilise cet operateur dans un calcul de checksum c'est assez embetant car ce genre de calcul tolere mal les approximations :)
Je ne vois pas ton problème. La réponse de Python est juste ici alors que je ne comprend pas comment comment obtenir la première réponse. Il n'y a aucune logique ici.
Ah si j'ai trouvé : ceci te donne le bon résultat :
( 5597564875 & 0xFFFFFFFF ) >> 13
Certes, mais avec Python 2.4.2 on a meme pas le droit a un
avertissement et au lieu d'avoir par exemple :
5597564875 >> 13 = 159008
on obtient :
5597564875 >> 13 = 683296L
Il n'y a pas photo c'est vrai, mais comme j'utilise cet operateur dans
un calcul de checksum c'est assez embetant car ce genre de calcul
tolere mal les approximations :)
Je ne vois pas ton problème. La réponse de Python est juste ici alors
que je ne comprend pas comment comment obtenir la première réponse. Il
n'y a aucune logique ici.
Ah si j'ai trouvé : ceci te donne le bon résultat :
Certes, mais avec Python 2.4.2 on a meme pas le droit a un avertissement et au lieu d'avoir par exemple :
5597564875 >> 13 = 159008
on obtient :
5597564875 >> 13 = 683296L
Il n'y a pas photo c'est vrai, mais comme j'utilise cet operateur dans un calcul de checksum c'est assez embetant car ce genre de calcul tolere mal les approximations :)
Je ne vois pas ton problème. La réponse de Python est juste ici alors que je ne comprend pas comment comment obtenir la première réponse. Il n'y a aucune logique ici.
Ah si j'ai trouvé : ceci te donne le bon résultat :
( 5597564875 & 0xFFFFFFFF ) >> 13
F. Petitjean
Certes, mais avec Python 2.4.2 on a meme pas le droit a un avertissement et au lieu d'avoir par exemple :
5597564875 >> 13 = 159008
on obtient :
5597564875 >> 13 = 683296L
Alors là chapeau : sur le système qui a python Python 2.3.4 (#1, Jun 9 2004, 17:31:37)
5597564875 >> 13 683296L
5597564875L >> 13 683296L
et avec ActivePython 2.4.1 Build 245 (ActiveState Corp.) based on...
5597564875 >> 13 683296L
5597564875L >> 13 683296L
Donc effectivement le FutureWarning (de 2.3.4) ne s'affiche pas mais le résultat final est chaque fois le même. Si vous avez effectivement un résultat différent avec 2.4.2, je pense qu'un message incendiaire à Anthony Baxter s'impose :-) Comment voulez-vous que python représente 5597564875 ?
5597564875 5597564875L
c'est donc un long qui est fourni automatiquement à partir du littéral dans la mesure où on ne peut pas le représenter sur un int (de C).
Il n'y a pas photo c'est vrai, mais comme j'utilise cet operateur dans un calcul de checksum c'est assez embetant car ce genre de calcul tolere mal les approximations :) Je ne vois pas le problème puisque vous pouvez systématiquement utiliser
des longs.
Certes, mais avec Python 2.4.2 on a meme pas le droit a un
avertissement et au lieu d'avoir par exemple :
5597564875 >> 13 = 159008
on obtient :
5597564875 >> 13 = 683296L
Alors là chapeau : sur le système qui a python
Python 2.3.4 (#1, Jun 9 2004, 17:31:37)
5597564875 >> 13
683296L
5597564875L >> 13
683296L
et avec ActivePython 2.4.1 Build 245 (ActiveState Corp.) based on...
5597564875 >> 13
683296L
5597564875L >> 13
683296L
Donc effectivement le FutureWarning (de 2.3.4) ne s'affiche pas mais le
résultat final est chaque fois le même. Si vous avez effectivement un
résultat différent avec 2.4.2, je pense qu'un message incendiaire à
Anthony Baxter s'impose :-)
Comment voulez-vous que python représente 5597564875 ?
5597564875
5597564875L
c'est donc un long qui est fourni automatiquement à partir du littéral
dans la mesure où on ne peut pas le représenter sur un int (de C).
Il n'y a pas photo c'est vrai, mais comme j'utilise cet operateur dans
un calcul de checksum c'est assez embetant car ce genre de calcul
tolere mal les approximations :)
Je ne vois pas le problème puisque vous pouvez systématiquement utiliser
Certes, mais avec Python 2.4.2 on a meme pas le droit a un avertissement et au lieu d'avoir par exemple :
5597564875 >> 13 = 159008
on obtient :
5597564875 >> 13 = 683296L
Alors là chapeau : sur le système qui a python Python 2.3.4 (#1, Jun 9 2004, 17:31:37)
5597564875 >> 13 683296L
5597564875L >> 13 683296L
et avec ActivePython 2.4.1 Build 245 (ActiveState Corp.) based on...
5597564875 >> 13 683296L
5597564875L >> 13 683296L
Donc effectivement le FutureWarning (de 2.3.4) ne s'affiche pas mais le résultat final est chaque fois le même. Si vous avez effectivement un résultat différent avec 2.4.2, je pense qu'un message incendiaire à Anthony Baxter s'impose :-) Comment voulez-vous que python représente 5597564875 ?
5597564875 5597564875L
c'est donc un long qui est fourni automatiquement à partir du littéral dans la mesure où on ne peut pas le représenter sur un int (de C).
Il n'y a pas photo c'est vrai, mais comme j'utilise cet operateur dans un calcul de checksum c'est assez embetant car ce genre de calcul tolere mal les approximations :) Je ne vois pas le problème puisque vous pouvez systématiquement utiliser
des longs.
FB
Merci les gars, maintenant je ne comprends meme plus ma question :)
J'ai bien un resultat qui correspond a mes attentes avec le truc de Christophe (x & 0xFFFFFFFF) >> 13
Mais sur l'ensemble de l'algo ou y a aussi des +, - ~, <<, & et | le resultat final est toujours aussi tordu...
En fait je voulais adapter ce code php qui permet de faire des requetes google ( http://www.v7n.com/forums/coding-forum/26785-php-script-display-google-page-rank.html )
Et pour l'instant, je n'obtiens pas les memes resultats avec le script php et avec le script python... je ressayerais demain.
Merci les gars, maintenant je ne comprends meme plus ma question :)
J'ai bien un resultat qui correspond a mes attentes avec le truc de
Christophe (x & 0xFFFFFFFF) >> 13
Mais sur l'ensemble de l'algo ou y a aussi des +, - ~, <<, & et | le
resultat final est toujours aussi tordu...
En fait je voulais adapter ce code php qui permet de faire des requetes
google (
http://www.v7n.com/forums/coding-forum/26785-php-script-display-google-page-rank.html
)
Et pour l'instant, je n'obtiens pas les memes resultats avec le script
php et avec le script python... je ressayerais demain.
Merci les gars, maintenant je ne comprends meme plus ma question :)
J'ai bien un resultat qui correspond a mes attentes avec le truc de Christophe (x & 0xFFFFFFFF) >> 13
Mais sur l'ensemble de l'algo ou y a aussi des +, - ~, <<, & et | le resultat final est toujours aussi tordu...
En fait je voulais adapter ce code php qui permet de faire des requetes google ( http://www.v7n.com/forums/coding-forum/26785-php-script-display-google-page-rank.html )
Et pour l'instant, je n'obtiens pas les memes resultats avec le script php et avec le script python... je ressayerais demain.