Grave erreur sur ce site

HumbuckerSingleCoil Messages postés 11 Date d'inscription jeudi 18 juin 2009 Statut Membre Dernière intervention 2 novembre 2009 - 18 juin 2009 à 09:02
FlorianWebmastering Messages postés 237 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 19 juin 2009 - 18 juin 2009 à 09:53
Bonjour,
J'ai remarqué plusieurs erreurs impardonables de la part de l'un des rédacteurs de tutoriels sur ce site :
https://forums.commentcamarche.net/forum/affich-37622105-langage-c-les-types-de-donnees

Il est dit que les float vont de 3.4*10 puissance -38 à 3.4*10 puissance 38.

Or, 10 puissance -38 est strictement positif... alors que les float vont dans les négatifs.

En fait, pour les float, ce n'est pas : 3.4*10 puissance -38 à 3.4*10 puissance 38.
Mais : -3.4*10 puissance 38 à 3.4*10 puissance 38.
Avec un moins devant le 3.4 et à la puissance 38.

Même remarque pour les double et les long double.

Encore la même erreur ici :
https://www.commentcamarche.net/contents/196-langage-c-les-types-de-donnees

Sauf que là, il y a bien les moins devant la borne inférieure des float, double et long double.
Il faut juste changer la puissance et la mettre positive.

C'est une erreur inadmissible de votre part et bien des programmeurs ont dû s'arracher les cheveux pour comprendre ce qui n'allait pas.

J'espère que vous corrigerez cet erreur incompréhensible les plus vite possible.

Cordialement, Grégory L. , étuudiant en Informatique à l'Université Joseph Fourier de Grenoble.

16 réponses

J'espère que vous corrigerez cet erreur incompréhensible les plus vite possible.
J'espère que vous corrigerez cette erreur incompréhensible le plus vite possible.

Personne n'est parfait à ce que je vois !
0
FlorianWebmastering Messages postés 237 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 19 juin 2009 20
18 juin 2009 à 09:22
"Cher" grégory L.
Méditez ceci: Évangile de Luc, 6, 41 : « Pourquoi vois-tu la paille qui est dans l'œil de ton frère et n'aperçois-tu pas la poutre qui est dans ton œil à toi ! Ou comment peux-tu dire à ton frère : Frère, laisse-moi ôter la paille qui est dans ton œil, toi qui ne vois pas la poutre qui est dans le tien ? Hypocrite, ôte premièrement la poutre de ton œil, et alors tu verras comment ôter la paille qui est dans l'œil de ton frère. »
0
Utilisateur anonyme
18 juin 2009 à 09:26
étuudiant

T'as oublié sa.
1
HumbuckerSingleCoil Messages postés 11 Date d'inscription jeudi 18 juin 2009 Statut Membre Dernière intervention 2 novembre 2009
18 juin 2009 à 09:26
Alors ce qui me fais marrer, c'est que je signale une erreur de programmation et on se fout de ma gueule car j'ai fait une faute de frappe en rajoutant un 's' à un mot...

Je ne voulais pas vous offenser ou quoi que ce soit, je veux juste signaler une erreur sur ce site.

A moins que vous ne voulez pas la corriger et ainsi plusieurs programmeurs comme moi se casseront la tête pour rien à cause d'une erreur marquée sur un tutoriel.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
HumbuckerSingleCoil Messages postés 11 Date d'inscription jeudi 18 juin 2009 Statut Membre Dernière intervention 2 novembre 2009
18 juin 2009 à 09:28
T'as oublié sa.

C'est pas "sa" mais "ça".

Alors quand on se fout de la gueule des autres, on ferait mieux de se regarder avant.

"Cher" FlorianWebmastering
Méditez ceci: Évangile de Luc, 6, 41 : « Pourquoi vois-tu la paille qui est dans l'œil de ton frère et n'aperçois-tu pas la poutre qui est dans ton œil à toi ! Ou comment peux-tu dire à ton frère : Frère, laisse-moi ôter la paille qui est dans ton œil, toi qui ne vois pas la poutre qui est dans le tien ? Hypocrite, ôte premièrement la poutre de ton œil, et alors tu verras comment ôter la paille qui est dans l'œil de ton frère. »
0
FlorianWebmastering Messages postés 237 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 19 juin 2009 20
18 juin 2009 à 09:29
Ce n'est pas une erreur très grave... Je suis moi même développeur et je ne pense pas que cette erreur minime soit handicapante.
0
HumbuckerSingleCoil Messages postés 11 Date d'inscription jeudi 18 juin 2009 Statut Membre Dernière intervention 2 novembre 2009
18 juin 2009 à 09:30
Autant pour moi, ce n'est pas à FlorianWebmastering que je voulais écrire mon précédent message mais à spe2d.
0
blackmamba6 Messages postés 595 Date d'inscription mercredi 20 mai 2009 Statut Membre Dernière intervention 16 juillet 2009 45
18 juin 2009 à 09:30
Certes, sa façon de dire les choses n'est pas délicate, c'est vrai, on peut le dire,
Cependant, il contribue a l'amélioration des tutoriels du site pour éviter que des Post qui auraient été jugés inutiles soient sur le forum vu que des tuto sont dispo sur votre site,
Merci d'avoir vu les erreurs, cependant, peux tu nous donner un lien vers une source pour pouvoir certifiés leurs erreurs?
0
HumbuckerSingleCoil Messages postés 11 Date d'inscription jeudi 18 juin 2009 Statut Membre Dernière intervention 2 novembre 2009
18 juin 2009 à 09:31
Bien sûr, blackmamba6.

Voici un petit programme en console qui permet de donner une série de statistiques à partir d'une série de valeurs :

#include <stdio.h>
#include <stdlib.h>

#define MAX_STR 65536
#define MAX_VAL 200

double NotUsed;

#define RIGHT_SEPARTOR 185
#define VERTICAL_LINK 186
#define RIGHT_TOP 187
#define RIGHT_BOTTOM 188
#define LEFT_BOTTOM 200
#define LEFT_TOP 201
#define VERTICAL_BOTTOM_SEPARATOR 202
#define VERTICAL_TOP_SEPARATOR 203
#define LEFT_SEPARATOR 204
#define HORIZONTAL_LINK 205
#define QUAD_LINK 206
#define SPACECHAR (' ')
#define ENDLINECHAR ('\n')

void PrintXChars(int c, int x){int i=0;for(i=0;i<x;i++)printf("%c", c);}
void Print(char *str){printf("%s", str);}

#define PrintLine000 {PrintXChars(ENDLINECHAR, 1);}
#define PrintLine001 {PrintXChars(SPACECHAR, 12);PrintXChars(LEFT_TOP, 1);PrintXChars(HORIZONTAL_LINK, 52);PrintXChars(RIGHT_TOP, 1);PrintXChars(SPACECHAR, 12);PrintXChars(ENDLINECHAR, 1);}
#define PrintLine002 {PrintXChars(SPACECHAR, 12);PrintXChars(VERTICAL_LINK, 1);PrintXChars(SPACECHAR, 52);PrintXChars(VERTICAL_LINK, 1);PrintXChars(SPACECHAR, 12);PrintXChars(ENDLINECHAR, 1);}
#define PrintLine003 {PrintXChars(SPACECHAR, 12);PrintXChars(LEFT_BOTTOM, 1);PrintXChars(HORIZONTAL_LINK, 52);PrintXChars(RIGHT_BOTTOM, 1);PrintXChars(SPACECHAR, 12);PrintXChars(ENDLINECHAR, 1);}
#define PrintTitleLine {PrintXChars(SPACECHAR, 12);PrintXChars(VERTICAL_LINK, 1);PrintXChars(SPACECHAR, 20);Print("STATISTIQUES");PrintXChars(SPACECHAR, 20);PrintXChars(VERTICAL_LINK, 1);PrintXChars(SPACECHAR, 12);PrintXChars(ENDLINECHAR, 1);}

#define CommonSpaces PrintXChars(SPACECHAR, 7)

char *Intro(){PrintLine000 PrintLine001 PrintLine002 PrintTitleLine PrintLine002 PrintLine003 PrintLine000}
char *GetString(){char *StrValues=(char*)malloc(MAX_STR*sizeof(char));CommonSpaces;printf("Entrez une s%crie de valeurs s%cpar%ces par des points-virgule (;).\n", 130, 130, 130);CommonSpaces;printf("Puis appuyez sur la touche Entr%ce.\n", 130);CommonSpaces;printf("Pour quitter, appuyez sur la touche - puis sur la touche Entr%ce.\n", 130, 130);PrintLine000 CommonSpaces;printf("Valeurs : ");scanf("%s", StrValues);return StrValues;}
int VerifyString(char *str){int i=0, ok=1;while(str[i]){if((str[i]<'0' || str[i]>'9') && str[i]!='-' && str[i]!='.' && str[i]!=';')ok=0;i++;}return ok;}

char *InitialiseStr(char *str){int i=0;for(i=0;i<MAX_STR;i++)str[i]=' ';return str;}

/*****************************************************************************/
double Absolute(double value)
{
if(value>=0)
return value;
else
return -value;
}

double Power(double value, int power)
{
int counter=0, IsNegativePower=0;
double res=1;
if(power<0)
{
IsNegativePower=1;
power=Absolute(power);
}
else if(power==0)
return 1;
else if(power==1)
return value;
while(counter!=power)
{
res=res*value;
counter++;
}
if(IsNegativePower==0)
return res;
else
return 1/res;
}
/*****************************************************************************/
double Average(double *values)
{
int i=0;
double sum=0;
while(values[i]!=NotUsed+1)
{
sum+=values[i];
i++;
}
if(i != 0)
return sum/i;
else
return 0;
}

double StandardDeviation(double *values)
{
int i=0;
double AverageValue = Average(values), sum = 0;
while(values[i]!=NotUsed+1)
{
sum+=Absolute(values[i]-AverageValue);
i++;
}
if(i != 0)
return sum/i;
else
return 0;
}

double Variance(double *values)
{
return Power(StandardDeviation(values), 2);
}

double Minimum(double *values)
{
int i=0;
double Min=1.7*Power(10, 308);
while(values[i]!=NotUsed+1)
{
if(values[i]<Min)
Min=values[i];
i++;
}
return Min;
}

double Maximum(double *values)
{
int i=0;
double Max=-1.7*Power(10, 308);
while(values[i]!=NotUsed+1)
{
if(values[i]>Max)
Max=values[i];
i++;
}
return Max;
}

double Extent(double *values)
{
return Maximum(values)-Minimum(values);
}
/*****************************************************************************/
double ConvertDoubleStringToDoubleNumber(char *str)
{
int integerpart=0, doublepart=0, doublepartcounter=0, i=0, IsNegativeNumber=0;
if(str[i]=='-')
{
IsNegativeNumber=1;
i++;
}
while(str[i]!='\0' && str[i]>='0' && str[i]<='9')
{
integerpart=10*integerpart+(str[i]-'0');
i++;
}
i++;
while(str[i]!='\0' && str[i]>='0' && str[i]<='9')
{
doublepart=10*doublepart+(str[i]-'0');
i++;
doublepartcounter++;
}
if(IsNegativeNumber==1)
return -integerpart+doublepart/Power(10, doublepartcounter);
else
return integerpart+doublepart/Power(10, doublepartcounter);
}

double *AssignValues(char *str)
{
double *values=(double *)malloc(MAX_VAL*sizeof(double));
char *scanned=InitialiseStr((char *)malloc(MAX_STR*sizeof(char)));
int i=0, j=0, k=0, m=0;
while(str[i]!=';' && i<strlen(str))
{
j=i;
while(str[j]!=',' && str[j]!=';' && j<strlen(str) && k<strlen(scanned))
{
scanned[k]=str[j];
j++;
k++;
}
scanned[k]='\0';
values[m]=ConvertDoubleStringToDoubleNumber(scanned);
NotUsed+=values[m];
scanned=InitialiseStr(scanned);
i=j;
k=0;
i++;
m++;
}
free(scanned);
values[m]=NotUsed+1;
return values;
}

int main(int argc, char *argv[], char *env[])
{
system("TITLE REALISE PAR GREGORY LECAULT LE JEUDI 18 JUIN 2009 A 08H47");
Intro();
char *String=GetString();
double *values;
if(VerifyString(String))
{
values=AssignValues(String);
CommonSpaces;printf("Moyenne : %lg\n", Average(values));
CommonSpaces;printf("Ecart-type : %lg\n", StandardDeviation(values));
CommonSpaces;printf("Variance : %lg\n", Variance(values));
CommonSpaces;printf("Minimum : %lg\n", Minimum(values));
CommonSpaces;printf("Maximum : %lg\n", Maximum(values));
CommonSpaces;printf("Etendue : %lg\n", Extent(values));
PrintXChars(ENDLINECHAR, 1);
CommonSpaces;system("PAUSE");
}
else
return 0;
free(String);
free(values);
system("cls");
main(0, NULL, NULL);
return 0;
}
0
blackmamba6 Messages postés 595 Date d'inscription mercredi 20 mai 2009 Statut Membre Dernière intervention 16 juillet 2009 45
18 juin 2009 à 09:34
Merci beaucoup de cette réponse rapide :)
0
FlorianWebmastering Messages postés 237 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 19 juin 2009 20
18 juin 2009 à 09:35
Petite astuce: quand vous insérez du code dans un post mettez les balises "< code > < / code >"
pour garder la mise en forme ;)
Je vais vérifier l'authenticité de ta remarque, merci pour ta contribution.
0
HumbuckerSingleCoil Messages postés 11 Date d'inscription jeudi 18 juin 2009 Statut Membre Dernière intervention 2 novembre 2009
18 juin 2009 à 09:36
En fait, je m'en suis aperçu dans mes fonctions "Minimum" et "Maximum".

Pour vérifier, tu n'as qu'à remplacer -1.7*Power(10, 308); dans la fonction Maximum par 1.7*Power(10, -308);
0
FlorianWebmastering Messages postés 237 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 19 juin 2009 20
18 juin 2009 à 09:40
Après vérifications, l'auteur du tuto et toi avez tous 2 tort.
voici la réponse exacte:

float +/-1.4*10^-45 à +/- 3.4*10^38
0
HumbuckerSingleCoil Messages postés 11 Date d'inscription jeudi 18 juin 2009 Statut Membre Dernière intervention 2 novembre 2009
18 juin 2009 à 09:43
Bah en fait, si tu entres les valeurs -1;7;
Tu as comme maximum 1.7*10 puissance 308.

Bah tu as surement raison FlorianWebmastering, mais pour les valeurs des DOUBLE, au départ, j'ai suivi ce tutoriel donc je me suis fié aux valeurs données par l'auteur de ce tutoriel.
0
HumbuckerSingleCoil Messages postés 11 Date d'inscription jeudi 18 juin 2009 Statut Membre Dernière intervention 2 novembre 2009
18 juin 2009 à 09:48
(
Je viens de remarquer une erreur dans mon programme : lors de l'assignement de la valeur pour NotUsed, il faut utiliser la fonction Absolute :
NotUsed+=Absolute(values[m]);
car si l'on rentre les valeurs -1;2; on a une erreur.
)
0
FlorianWebmastering Messages postés 237 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 19 juin 2009 20
18 juin 2009 à 09:53
Désolé il y a une erreur sur mon post précédent, je viens de vérifier dans les librairie et j'ai trouvé:
ce sont bien évidemment les valeurs absolues.
on a donc
Range of Floating-Point Types
Type  	    Minimum value 	                   Maximum value
float 	      +/-1.175494351 E – 38 	      +/-3.402823466 E + 38
double   +/-2.2250738585072014 E – 308  +/-1.7976931348623158 E + 308

voir ici: https://www.microsoft.com/en-us/download/details.aspx?id=55979
0