et si tu virais le cast ?
2> non les tailles varient jusqu'à 255 (grand maximum, je ne pense pas que ce nombre soit utilisé mais root(256)=16 ce n'est pas assez (pour faire rentrer W et H dans un meme octet)
les tailles varient effectivement et je vais realloc() la variable (si cela est possible, parce que c'est la premeiere fois que je me sers de ces fonctions) plusieurs fois au cours du programme (lecture d'une autre partie du fichier, qui sera plus ou moins grande)
(ce que j'ai appelé la méthode de Kevin c'est dans l'autre topic)
quant à l'inversion de x et de y, c'est pas grave. j'avais oublié mais je m'en serais vite rendu compte
1> j'ai essayé, ca me fait je sais plus une autre erreur, j'ai essaye aussi toutes les combinaisons de placements de '&' devant lvl et ptr
euh pour le 'non' c'est parce que j'avais l'impression que tu parlais de tres grandes tailles dans ton post
pour l'histoire du 255 :
dans un fichier ya la largeur (W) du niveau dans un octet puis l'octet suivant la hauteur (H tu avais sans doute compris) donc la hauteur et la largeur peuvent aller jusqu'a 255 chacun. comme je ne pense pas avoir de niveaux de dimensions 255 (trop grand) j'aurais pu ranger les 2 dimensions dans un octet mais cette fois ca serait trop petit
(je me suis a parler de ca qui peut sembler HS parce j'avais l'impression que tu croyais que W et H étaient tres grands : parce je n'ai pas compris pourquoi avoir recours au log en base 2)
le ET qui remplace le modulo c'est :
a%b == a&(b-1)
si c'est cuila j'avais trouvé que ca marchait qu'avec les b pairs (en gros si b est impair (b-1) est pair est donc a&(b-1) se forcement un nombre pair)
mais le log en base 2 ca va pas ramer d'utiliser des nombres non-entiers (ou il faut que je force les tailles a etre puissances de 2 ?) ?
et puis sinon pourquoi utiliser #define si ca va varier ?
et pourquoi parles-tu de chaque instruction calculer W*H ? dans le for ? (si c'est ca je peux utiliser une variable intermediaire)
ah oui (on ne m'avais pas prevenu et en plus je l'avais pas remarqué)
Je parlais de W et H puissances de 2, oui.
L'intérêt de passer par le log en base 2 est alors d'assurer au compilo qu'on multiplie bien par une puissance de 2.
« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)
ah oui j'avais mal lu
mais sinon avant de parler d'optimisation (je ne rejette pas du tout, tes conseils sont tres interessants), comment copier la zone du fichier dans le tableau ?
bon pour en revenir au log en base 2 je vois pas comment remplacer la multiplication (desole mais je suis un peu lent)
Si tes entiers sont des puissances de 2, tu peux les remplacer par des shifts. Mais laisser tomber, pour 2 octets (c'est tout ce que ça économise), ça ne vaut pas le coup.
mhhh et comment on fait avec le log et le decalage ? (j'ai vraiment pas compris comment eviter la multiplication)
merci ca je savais quand meme, ce que j'ai pas compris c'est en quoi ca simplifiait de s'en servir
2 octets de moins, et plus rapide.
ouais mais ca prendra plus de place si W et H doivent absolument etre des puissances de 2 ...
Oui, plus de RAM, mais ce sera plus rapide. A toi de voir.
« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)