Casse tête de la semaine
Modérateur : Politburo
Je crois que Yves avait compris C'est à la portée d'un programmeur moyen ce problème. La vraie difficulté ici c'est la connaissance du Basic Thomson...jasz a écrit :J'ai utilisé &H12345678 comme j'aurais pu utiliser &H3985CD5D
Un ch'tit coup de main.
&H1234*65536=&H12340000
Si le C te va pas, que dirais-tu d'une version en Pampuk Forth ?
Apparemment y'a un VARPTR ou assimilé sur ce Basic, donc c'est assez trivial non ?
Modifié en dernier par Torlus le 06 avr. 2006 14:07, modifié 1 fois.
"Pour finir, faut commencer."
"Il faut être un peu félé pour laisser passer la lumière".
"Il faut être un peu félé pour laisser passer la lumière".
Ce n'est pas un problème de basic thomson car la solution est compatible avec tous les basic.Torlus a écrit :La vraie difficulté ici c'est la connaissance du Basic Thomson...
On utilise que des +-* et /
C'est pour cette raison que presonne n'a trouvé la soluceTorlus a écrit :C'est à la portée d'un programmeur moyen ce problème.
Pfft
AH = (A/65536)
AL = A-(AH*65536)
A = AL*65536+AH
Satisfait ?
A supposer comme l'a dit justement quelqu'un précédemment, le Basic sache gérer des nombres sur 32 bits (ce dont je doute).
Pour ta culture, >> et << sont des opérateurs de bitshift, qui font l'équivalent des multiplications/divisions par 65536, et qui existent sur pas mal de langages.
Yves avait donc donné la bonne réponse.
Si ça existe sur le Basic Thomson, utilise ça à la place (ou alors tu fais confiance au Basic pour qu'il fasse l'optimisation tout seul, au lieu de perdre un temps précieux à faire les multiplications/divisions).
AH = (A/65536)
AL = A-(AH*65536)
A = AL*65536+AH
Satisfait ?
A supposer comme l'a dit justement quelqu'un précédemment, le Basic sache gérer des nombres sur 32 bits (ce dont je doute).
Pour ta culture, >> et << sont des opérateurs de bitshift, qui font l'équivalent des multiplications/divisions par 65536, et qui existent sur pas mal de langages.
Yves avait donc donné la bonne réponse.
Si ça existe sur le Basic Thomson, utilise ça à la place (ou alors tu fais confiance au Basic pour qu'il fasse l'optimisation tout seul, au lieu de perdre un temps précieux à faire les multiplications/divisions).
"Pour finir, faut commencer."
"Il faut être un peu félé pour laisser passer la lumière".
"Il faut être un peu félé pour laisser passer la lumière".
AlorsCLS2086 a écrit :Converti en décimal ça passera mieux ...
A=305419896
C'est mieux?
Oui, c'est la bonne réponseTorlus a écrit :AH = (A/65536)
AL = A-(AH*65536)
A = AL*65536+AH
Satisfait ?
Moi c'est du style
A=&H1234*65536+&H5678
AA=INT(A/65536)
A=(A-AA*65536)*65536+AA
Ce qui revient à la même chose. Enfantin!
ps
Sauf le basic... Faut suivre là.Torlus a écrit :Pour ta culture, >> et << sont des opérateurs de bitshift, qui font l'équivalent des multiplications/divisions par 65536, et qui existent sur pas mal de langages.
- foolduplex
- Fonctionne à 1200 bauds
- Messages : 628
- Enregistré le : 02 oct. 2002 23:06
- Localisation : Lausanne, Suisse
- Contact :
ouaip. sauf que je persiste et signe : les entiers sont limites a -32768..32767 en BASIC Thomson.
En realite, si tu ecris le code ci-dessus, ce qu'il se passe c'est que ta variable est declaree en nombre a virgule flottante et les calculs sont faits en virgule flottante. Comme les nombres flottants sont codes totalement differemment des entiers en memoire, ce calcul n'a aucun interet pratique.
(il suffit pour s'en convaincre de faire un PRINT A qui affiche un consternant 3.0542E+08 au lieu de 305419896)
Naturellement, je ne parle pas des BASIC pouvant gerer des entiers plus grands, qui eux realiseront sans doute l'operation esperee.
Fool
En realite, si tu ecris le code ci-dessus, ce qu'il se passe c'est que ta variable est declaree en nombre a virgule flottante et les calculs sont faits en virgule flottante. Comme les nombres flottants sont codes totalement differemment des entiers en memoire, ce calcul n'a aucun interet pratique.
(il suffit pour s'en convaincre de faire un PRINT A qui affiche un consternant 3.0542E+08 au lieu de 305419896)
Naturellement, je ne parle pas des BASIC pouvant gerer des entiers plus grands, qui eux realiseront sans doute l'operation esperee.
Fool
- jvernet
- Fonctionne à 14400 bauds
- Messages : 7958
- Enregistré le : 24 mai 2002 09:57
- Localisation : France 69
- Contact :
En l'occurence, 3.0542E+08 est le bon resultat, affiché dans un format virgule flottante .foolduplex a écrit :
(il suffit pour s'en convaincre de faire un PRINT A qui affiche un consternant 3.0542E+08 au lieu de 305419896)
Dans le BASIC microsoft, il y avait la possibilité de typer les variables, (I%; I#,...) ça n'existe pas sur les TO ?
Par contre, l'encodage en mémoire n'a rien à voir, sans doute.
Ca m'enerve, ces BASIC qui se limitent aux entiers 16bits signés, m'empéche de faire des boucles FOR dès que I>32768...
"l'ordinateur et l'homme sont les deux opposés les plus intégraux qui existent. L'homme est lent, peu rigoureux et très intuitif. L'ordinateur est super rapide, très rigoureux et complètement con."