Page 1 sur 1

Grande Boucle & Structure

Publié : ven. 06/nov./2009 14:48
par Ganagyre
Bonjour à tous.

J'ai besoin d'utiliser une structure de grande dimension, pour calculer le nombre d'apparition de certaines valeurs.

Ma fourchette de valeurs se situe entre 1 et 400 000 000 000, pour une premiére ébauche.
( je réduirai sans doute de beaucoup par la suite).

Je définis une taille de structure de DIM 400 000 000 000.

Ensuite je remplis de maniére aléatoire la structure sans dépasser la capacité définie en Byte .b ,1 octet . (En pratique tous les emplacement de la structures ne sont pas tous utilisés, seulement un certains nombre de la fourchette entre 1 et 400 000 000 000).

Dans le petit exemple de code suivant, le remplissage aléatoire de la structure fonctionne, mais certains resultats du "debug" ne marchent pas.

Etonnant aussi le debug de la boucle for/next i qui donne = 568 041 473.
Alors qu'en fin de code tout semble indiquer que la boucle est bien parcourue jusqu'au bout !

Code : Tout sélectionner

; Tres longue Boucle & Structure
;     400 000 000 000  // 
max.q = 400000000000    ; Quad .q = maxi 9223372036854775807 // 9 223 372 036 854 775 807
;
Structure resultat
    total.b         ; Byte .b / 1 octet Maxi = 127   
EndStructure
;
Dim calcul.resultat(max)
;  
DisableDebugger  
;
  For i = 1 To 400000000000

    calcul(i)\total = (Random(100-1))+1 ; Valeurs aleatoires entre 1 & 100
  
  Next i 

    ;calcul(max)\total = 123
  
EnableDebugger
;
Debug i      ; Pourquoi = 568 041 473 ?
Debug "_________________________________"
;

Debug calcul(1)\total
Debug calcul(10)\total
Debug calcul(100)\total
Debug calcul(1000)\total
Debug calcul(10000)\total
Debug calcul(100000)\total
Debug calcul(1000000)\total
Debug calcul(10000000)\total
Debug calcul(100000000)\total
;===================================
;Debug calcul(1000000000)\total    ; Erreur ?
;Debug calcul(10000000000)\total   ; Erreur ?
;Debug calcul(100000000000)\total  ; Erreur ?
; MAX =       400000000000
;===================================
;
Debug calcul(i-1)\total ; Fonctionne  
Debug calcul(max)\total ; Fonctionne 


Ou serait l'erreur dans le code ?

Voila, merci pour toute infos.
@+

Re: Grande Boucle & Structure

Publié : ven. 06/nov./2009 15:33
par zaphod
Je crois qu'il faudrait definir i en quad : i.q
Mais le for/next n'accepte pas le quad.

Il faut utiliser un while/wend et ca marche...

Re: Grande Boucle & Structure

Publié : ven. 06/nov./2009 17:09
par Cls
Et ben il en faut de la mémoire pour stocker tout ça ! 8O

Re: Grande Boucle & Structure

Publié : ven. 06/nov./2009 17:23
par djes
Sur un système 32 bits, tu ne pourras pas faire une boucle for/next de cette taille. Sur un système 64 bits, si tu utilises l'entier .i, oui. Sinon, tu peux utiliser un autre type de boucle (comme while/wend ou repeat/until, ou même un gosub), et incrémenter un compteur que tu testeras à chaque passage.

Re: Grande Boucle & Structure

Publié : sam. 07/nov./2009 7:43
par Ganagyre
while/wend ou repeat/until et gosub.
En effet cela semble convenir.
Je vais tester ces 3 nouvelles possibilitées.

Merci à tous .

Re: Grande Boucle & Structure

Publié : lun. 09/nov./2009 0:11
par djes
Evidemment, tu joues avec certaines limites, et je doute que tu puisses faire un tableau pareil sur une malheureuse machine 32 bits avec un pauvre windows xp de base ;)