A voir également:
- Erreurs dans une operation (language C)
- "Winamp language pack" ✓ - Forum Logiciels
- Impossible d'effectuer l'opération car vous ne disposez pas des autorisations requises ✓ - Forum MacOS
- L'opération demandée nécessite une élévation ✓ - Forum Logiciels
- L'opération demandée nécessite une élévation. ✓ - Forum LibreOffice / OpenOffice
- Archicad 26 language pack french ✓ - Forum Architecture / décoration
3 réponses
Hxyp
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
54
Modifié par Hxyp le 15/07/2011 à 02:53
Modifié par Hxyp le 15/07/2011 à 02:53
Bonjour,
le poblème de segmentation c'est à cause de l'allocation mémoire quand vous utilisez le type double le tableau devient trop grand alors il faut réserver la mémoire dynamiquement. Mais les double ne sont pas utiles ici vu qu'il n'y a aucune division vous pouvez utiliser des unsigned int
Pour la somme c'est bien la somme de tout les nombres premiers dans le tableau ?
En reprenant vôtre code d'une différente façon et aider de http://fr.wikipedia.org/wiki/Crible_d'Ératosthène :
Ça me donne :
b = 18263738,tableau[18439] = 18439
1179908154 === sum
Est-ce correct ?
le poblème de segmentation c'est à cause de l'allocation mémoire quand vous utilisez le type double le tableau devient trop grand alors il faut réserver la mémoire dynamiquement. Mais les double ne sont pas utiles ici vu qu'il n'y a aucune division vous pouvez utiliser des unsigned int
Pour la somme c'est bien la somme de tout les nombres premiers dans le tableau ?
En reprenant vôtre code d'une différente façon et aider de http://fr.wikipedia.org/wiki/Crible_d'Ératosthène :
#include <stdlib.h> #include <stdio.h> int main(void) { unsigned int *tableau; unsigned int N = 2, m=2000000; unsigned int i,j; unsigned int b = 0; tableau=calloc(m,sizeof(unsigned int)); printf("remplissage du tableau\n"); for(i=0;i<m;i++) { tableau[i] = i; } printf("tableau ok\ncheck...\n"); for(i=N;i<m;i++) { if(tableau[i]!=0){ for(j=i+i;j<m;j+=i) { tableau[j]=0; } } } printf("check ok\n"); for(i=N;i<m;i++) { if(tableau[i] != 0) { if(i==18439) printf("b = %d,tableau[%d] = %d\n",b,i,tableau[i]); b = b + tableau[i]; } } printf("%d === sum\n",b); free(tableau); return 0; }
Ça me donne :
b = 18263738,tableau[18439] = 18439
1179908154 === sum
Est-ce correct ?
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 015
Modifié par KX le 15/07/2011 à 11:14
Modifié par KX le 15/07/2011 à 11:14
float n'est pas un type de données exactes. Il est limité en précision.
Tu pourrais utiliser double qui est plus précis, mais il est quand même limité en précision.
Un peu de documentation : IEEE 754
La confiance n'exclut pas le contrôle
Tu pourrais utiliser double qui est plus précis, mais il est quand même limité en précision.
Un peu de documentation : IEEE 754
La confiance n'exclut pas le contrôle
nicocorico
Messages postés
799
Date d'inscription
dimanche 19 juin 2011
Statut
Membre
Dernière intervention
3 juillet 2018
138
Modifié par nicocorico le 15/07/2011 à 07:45
Modifié par nicocorico le 15/07/2011 à 07:45
Il faudrait peut-être remplacer les entiers du tableau par des booléens ^^, plutôt que de récupérer soit la valeur identique à l'index soit 0 :
Mais bon ça doit fonctionner quand même...
for(i=0;i<m;i++) { tableau[i] = i; }
Mais bon ça doit fonctionner quand même...
15 juil. 2011 à 21:11