1 != 1 - créer un bug ?
Fermé
niahoo
Messages postés
247
Date d'inscription
lundi 24 décembre 2007
Statut
Membre
Dernière intervention
23 mai 2010
-
4 janv. 2010 à 19:51
niahoo Messages postés 247 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 23 mai 2010 - 5 janv. 2010 à 02:44
niahoo Messages postés 247 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 23 mai 2010 - 5 janv. 2010 à 02:44
A voir également:
- 1 != 1 - créer un bug ?
- Créer un compte google - Guide
- Créer un compte gmail - Guide
- Comment créer un groupe whatsapp - Guide
- Bug yahoo mail - Accueil - Mail
- Créer un compte instagram sur google - Guide
6 réponses
moiced59
Messages postés
1145
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
18 août 2014
60
4 janv. 2010 à 20:26
4 janv. 2010 à 20:26
salut
alors:
9 + x = 9x + x
9 +3 = 9*3 +3
12 = 27+3
12=30
non je ne crois pas LOL!!!!
alors:
9 + x = 9x + x
9+1 = 9+1
La ok mais ce n'est pas general
alors:
9 + x = 9x + x
9 +3 = 9*3 +3
12 = 27+3
12=30
non je ne crois pas LOL!!!!
alors:
9 + x = 9x + x
9+1 = 9+1
La ok mais ce n'est pas general
niahoo
Messages postés
247
Date d'inscription
lundi 24 décembre 2007
Statut
Membre
Dernière intervention
23 mai 2010
19
4 janv. 2010 à 21:03
4 janv. 2010 à 21:03
non tu n'as pas saisi,
c'est: 10x = 9x + x qui se vérifie dans tous les cas.
en effet,
si x vaut 5,
10*5 = 9*5 + 5.
Mais dans ce cas précis, 9 + x = 9x + x quand x = 0,9999999999 infini
puisque chacune des deux expressions équivaut à 9,9999999999 infini
défini par
c'est: 10x = 9x + x qui se vérifie dans tous les cas.
en effet,
si x vaut 5,
10*5 = 9*5 + 5.
Mais dans ce cas précis, 9 + x = 9x + x quand x = 0,9999999999 infini
puisque chacune des deux expressions équivaut à 9,9999999999 infini
9 + x = 9,9999999999999999----à l'infini et: 10x = 9,9999999999999999----à l'infini
défini par
10x = 9x + x, prouvé au dessus.
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
4 janv. 2010 à 21:49
4 janv. 2010 à 21:49
niahoo, ton raisonnement est correct. Et oui, 9,999999999.... = 10 . En fait, tout ce qui se termine par 9 à l'infini, peut être remplacé par le "1" correspondant...
3,12399999999999999....
=
3,124
attention, tu n'as pas montré que 1 n'est pas égal à 1 ... tu as montré que 0.99999.... est égal à 1 . Il y a deux manière d'écrire le nombre entier 1 en écriture décimale : 1,0000.... et 0,9999.... ;)
3,12399999999999999....
=
3,124
attention, tu n'as pas montré que 1 n'est pas égal à 1 ... tu as montré que 0.99999.... est égal à 1 . Il y a deux manière d'écrire le nombre entier 1 en écriture décimale : 1,0000.... et 0,9999.... ;)
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
>
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
4 janv. 2010 à 21:57
4 janv. 2010 à 21:57
de plus, le fait d'avoir une contradiction mathématique, même s'il y en avait une pour de vraie, ne va pas faire partir ton processeur en vrille. si tu veux dégouter ton processeur d'avoir été fabriqué, il faut plutot faire un truc du genre :
1 : FAIRE UN CALCUL (3+5 par exemple)
2 : ALLER A LA LIGNE 1
ça suffit amplement :D
concernant plus précisément les nombres et les ordinateurs, de toute façon un ordinateur ne connait pas de nombre à virgule avec une infinité de décimales. Il ne travaille qu'avec un nombre fini de nombres (normal puisqu'il n'y a qu'un nombre fini de cases mémoires). Les "nombres" dans les ordis, ce sont des faux en quelque sorte, mathématiquement ce sont un sous-ensemble des nombres réels (et même des rationnels particulièrement).
1 : FAIRE UN CALCUL (3+5 par exemple)
2 : ALLER A LA LIGNE 1
ça suffit amplement :D
concernant plus précisément les nombres et les ordinateurs, de toute façon un ordinateur ne connait pas de nombre à virgule avec une infinité de décimales. Il ne travaille qu'avec un nombre fini de nombres (normal puisqu'il n'y a qu'un nombre fini de cases mémoires). Les "nombres" dans les ordis, ce sont des faux en quelque sorte, mathématiquement ce sont un sous-ensemble des nombres réels (et même des rationnels particulièrement).
lithium_3
Messages postés
2654
Date d'inscription
mercredi 14 janvier 2009
Statut
Contributeur
Dernière intervention
15 juillet 2013
139
4 janv. 2010 à 22:19
4 janv. 2010 à 22:19
Bonjour,
tout cela nous montre bien que l'infini n'est qu'une notion, un outil conceptuel de théoricien, mais en aucun cas un nombre avec lequel on puisse calculer!
Je doute que l'infini soit représentable en informatique.
Cordialement
tout cela nous montre bien que l'infini n'est qu'une notion, un outil conceptuel de théoricien, mais en aucun cas un nombre avec lequel on puisse calculer!
Je doute que l'infini soit représentable en informatique.
Cordialement
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
5 janv. 2010 à 00:51
5 janv. 2010 à 00:51
oui, le problème c'est j'aime dire que c'est comme le mot pollution. C'est complètement vague comme notion.
Par contre en maths c'est "quelque chose" de précis (ou plutot c'est plusieurs notions différentes). Il y a par exemple le fait qu'il y a une infinité de chiffres après la virgule (ça c'est précis ! et on peut avoir des résultats avec, par exemple le précédent). Il y a l"infiniment grand" dans les limites et les études de fonctions (niveau lycée). etc...
Simplement parler de "l'infini", je suis d'accord avec toi, n'est qu'une notion abstraite plus ou moins philosophique. Mais sinon, dans les applications elle est tout à fait utilisable : l'infini dont je te parlais des études de fonctions est déjà implémenté en programmation via le standard IEEE des nombres à virgule (flottante) habituels sur les ordinateurs.
Si tu fais un calcul qui donne un nombre trop grand, la valeur symbolique "Inf" est retournée. Elle réagit grosso-modo comme les limites (je ne sais pas si tu as vu ça où si tu t'en rappelles ? )
Par contre en maths c'est "quelque chose" de précis (ou plutot c'est plusieurs notions différentes). Il y a par exemple le fait qu'il y a une infinité de chiffres après la virgule (ça c'est précis ! et on peut avoir des résultats avec, par exemple le précédent). Il y a l"infiniment grand" dans les limites et les études de fonctions (niveau lycée). etc...
Simplement parler de "l'infini", je suis d'accord avec toi, n'est qu'une notion abstraite plus ou moins philosophique. Mais sinon, dans les applications elle est tout à fait utilisable : l'infini dont je te parlais des études de fonctions est déjà implémenté en programmation via le standard IEEE des nombres à virgule (flottante) habituels sur les ordinateurs.
Si tu fais un calcul qui donne un nombre trop grand, la valeur symbolique "Inf" est retournée. Elle réagit grosso-modo comme les limites (je ne sais pas si tu as vu ça où si tu t'en rappelles ? )
lithium_3
Messages postés
2654
Date d'inscription
mercredi 14 janvier 2009
Statut
Contributeur
Dernière intervention
15 juillet 2013
139
>
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
5 janv. 2010 à 01:26
5 janv. 2010 à 01:26
Forcément, je m'attaque à quelque chose qui est rentré dans le naturel de tout bon chercheur...
Le vide ou la fin fait peur, il nous est facile de dire "l'univers est infini" , ou qu'un disque est constitué d'une infinité de points ... Mais attention, d'une infinité de points infiniments petits!
Qu'est-ce qu'un chiffre si ce n'est qu'une invention de l'Homme (bien pratique, je ne le nie pas). Qu'est-ce que l'infini si ce n'est que l'incapacité à chiffrer quelque chose?
Au niveau du inf retourné par l'ordinateur, je me doutais que l'infini était défini sur ces machines mais l'infinité de chiffres après la virgule l'est-elle? Car cela dépend en plus du pouvoir de calcul du processeur, par exemple s'il est 32 ou 64 bits ... ?
Cordialement
Le vide ou la fin fait peur, il nous est facile de dire "l'univers est infini" , ou qu'un disque est constitué d'une infinité de points ... Mais attention, d'une infinité de points infiniments petits!
Qu'est-ce qu'un chiffre si ce n'est qu'une invention de l'Homme (bien pratique, je ne le nie pas). Qu'est-ce que l'infini si ce n'est que l'incapacité à chiffrer quelque chose?
Au niveau du inf retourné par l'ordinateur, je me doutais que l'infini était défini sur ces machines mais l'infinité de chiffres après la virgule l'est-elle? Car cela dépend en plus du pouvoir de calcul du processeur, par exemple s'il est 32 ou 64 bits ... ?
Cordialement
niahoo
Messages postés
247
Date d'inscription
lundi 24 décembre 2007
Statut
Membre
Dernière intervention
23 mai 2010
19
5 janv. 2010 à 01:05
5 janv. 2010 à 01:05
moi j'ai vu les limites.. mais hélàs je dessinais sur a table. mais si je me souviens bien ça permettait de montrer le comportement d'une fonction, savoir si elle tendait vers l'infini, 0, ou une constante sans avoir à tester empiriquement des valeurs.
je me rappelle effectivement en potassant un bouquin de C++ avoir lu que les flottants n'étaient qu'une approximation, des "fauxx" comme tu dis, j'ai lu qu'un compilateur trouvera que 2.00 et 2 sont différents. (float et int)
hmm oui une boucle infinie ça suffit pour planter un proc, mais je cherche surtout à le faire se tromper avec un algorithme correct. mais avec ce dont je viens de me rappeler concernant les flottants c'est effectivement impossible.
tu connais des applications mathématiques du 1 écrit 0,9999~ ?
je me rappelle effectivement en potassant un bouquin de C++ avoir lu que les flottants n'étaient qu'une approximation, des "fauxx" comme tu dis, j'ai lu qu'un compilateur trouvera que 2.00 et 2 sont différents. (float et int)
hmm oui une boucle infinie ça suffit pour planter un proc, mais je cherche surtout à le faire se tromper avec un algorithme correct. mais avec ce dont je viens de me rappeler concernant les flottants c'est effectivement impossible.
tu connais des applications mathématiques du 1 écrit 0,9999~ ?
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
5 janv. 2010 à 01:53
5 janv. 2010 à 01:53
tu connais des applications mathématiques du 1 écrit 0,9999~ ?
non. Ce serait plutôt un résultat en soit, une simple curiosité et un prétexte de réflexion sur "qu'est-ce qu'un nombre"... c'est un révélateur du problème que pose l'écriture décimale (et "qu'est ce que l'écriture décimale" d'un nombre? )
On peut retrouver ça plus simplement :
1/3 + 1/3 + 1/3 = 3/3 = 1
0.333... + 0.333... + 0.333 = 0.999...
Et sinon, par rapport à ta question de départ, c'est justement dans les float et leur approximation qu'il y a une grande source de bugs possibles.
j'ai fait un petit programme pour illustrer mes propos :
non. Ce serait plutôt un résultat en soit, une simple curiosité et un prétexte de réflexion sur "qu'est-ce qu'un nombre"... c'est un révélateur du problème que pose l'écriture décimale (et "qu'est ce que l'écriture décimale" d'un nombre? )
On peut retrouver ça plus simplement :
1/3 + 1/3 + 1/3 = 3/3 = 1
0.333... + 0.333... + 0.333 = 0.999...
Et sinon, par rapport à ta question de départ, c'est justement dans les float et leur approximation qu'il y a une grande source de bugs possibles.
j'ai fait un petit programme pour illustrer mes propos :
//------------------------------------------------ #include <iostream> #include <string> using namespace std; int main(int argc, char *argv[]) { float a=2.0, b=2.00001; cout << "Une erreur d'arrondi plutot importante :" << endl; cout << "a=" << a << endl << "b = " << b << endl; cout << "b-a = " << b-a << endl; cout << "100000000.0*(b-a) = " << 100000000.0*(b-a) << endl; cout << "Je doute que la banque ou le magasin apprecie!"; cout << endl << endl << endl; float c=5000.0; float d=c; float petit = 0.000001; cout << "Voici un petit nombre : " << petit << endl; cout << "1'000'000'000 * petit = " << 1000000000*petit << endl; cout << "c = " << c << endl; cout << "Ajout de 1'000'000'000 de fois petit dans c ... " << endl; for (int i=0; i<1000000000; i++) { // j'ajoute 1 milliard de fois un millionième. // en tout ça fait que j'ai ajouté 1000 // le résultat devrait être 500001000 d = d + petit; } cout << "d = "<<d << endl; cout << "c == d : " << ((c==d)?"vrai!":"faux!") << endl; //fin cin >> a; return 0; }
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
>
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
5 janv. 2010 à 02:01
5 janv. 2010 à 02:01
sortie sur mon ordi : http://img43.imageshack.us/img43/2534/nombresfloat.gif
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
niahoo
Messages postés
247
Date d'inscription
lundi 24 décembre 2007
Statut
Membre
Dernière intervention
23 mai 2010
19
5 janv. 2010 à 02:24
5 janv. 2010 à 02:24
héhé faut que je voie mon banquier moi ^^
super le PC qui ajoute 0 .. en même temps je pense que de lui faire faire un milliard de fois une simple addition au lieu d'utiliser la multiplication il t'en veut personnellement ton PC. fais le compiler par un CP/CE1 ton programme et tu verras y aura plus de bug !
exact, j'y avais pas pensé tiens ''/
ps: gaffe dans tes commentaires y a des coquilles, si quelqu'un tombe dessus tu vas lui faire rater ses examens de programmation :P
super le PC qui ajoute 0 .. en même temps je pense que de lui faire faire un milliard de fois une simple addition au lieu d'utiliser la multiplication il t'en veut personnellement ton PC. fais le compiler par un CP/CE1 ton programme et tu verras y aura plus de bug !
1/3 + 1/3 + 1/3 = 3/3 = 1 0.333... + 0.333... + 0.333 = 0.999...
exact, j'y avais pas pensé tiens ''/
ps: gaffe dans tes commentaires y a des coquilles, si quelqu'un tombe dessus tu vas lui faire rater ses examens de programmation :P
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
5 janv. 2010 à 02:30
5 janv. 2010 à 02:30
pour le commentaire, désolé, j'avais mis autre chose avant, et j'ai oublié de modifier, tu as bien corrigé.
et sinon ça peut paraître un peu tiré par les cheveux mon truc d'ajouter plein de fois 0...
pourtant tu as bien vu, mon nombre n'est pas 0.
Et en pratique lors de calcul scientifique, ou économique, etc., il arrive souvent de devoir ajouter un très grand nombre de valeurs entre elles. Mais si tu as plein de petites et une relativement grosse, peu importe le nombre de petite que tu ajoutes, la grosse aura "mangé" les autres si tu ne fais pas attention. Même si à la fin tu aurais été censé avoir un bien plus gros résultat.
et sinon ça peut paraître un peu tiré par les cheveux mon truc d'ajouter plein de fois 0...
pourtant tu as bien vu, mon nombre n'est pas 0.
Et en pratique lors de calcul scientifique, ou économique, etc., il arrive souvent de devoir ajouter un très grand nombre de valeurs entre elles. Mais si tu as plein de petites et une relativement grosse, peu importe le nombre de petite que tu ajoutes, la grosse aura "mangé" les autres si tu ne fais pas attention. Même si à la fin tu aurais été censé avoir un bien plus gros résultat.
niahoo
Messages postés
247
Date d'inscription
lundi 24 décembre 2007
Statut
Membre
Dernière intervention
23 mai 2010
19
5 janv. 2010 à 02:44
5 janv. 2010 à 02:44
oui j'ai constaté ça en faisant une carte dynamique en SVG/javascript basé sur les données du jeu Eve Online.
(c'est un plan de galaxie, des points représentent des systèmes solaires reliés entre eux par des stargates. un simple graphe au final. mais les coordonnées fournies par les dev du jeu dans leur dump sont de l'odre de x.10^17 pour les extremes. les dessins que je rajoutais dynamiquement, du genre deux droites perpendiculaires qui partent du système solaire demandé pour rejoindre les axes abscisses ordonnées afin de faire une grosse croix sur le système, partaient n'importe ou..
après m'être arraché plusieurs touffes de cheuveux sur mon algo qui me semblait pourtant correct j'ai arbitrairement divisé par 10^14 toutes les coordonnées reçues depuis MySQL et là magie..)
bon allez bonne nuitée et merci pour tes réponses ;)
(c'est un plan de galaxie, des points représentent des systèmes solaires reliés entre eux par des stargates. un simple graphe au final. mais les coordonnées fournies par les dev du jeu dans leur dump sont de l'odre de x.10^17 pour les extremes. les dessins que je rajoutais dynamiquement, du genre deux droites perpendiculaires qui partent du système solaire demandé pour rejoindre les axes abscisses ordonnées afin de faire une grosse croix sur le système, partaient n'importe ou..
après m'être arraché plusieurs touffes de cheuveux sur mon algo qui me semblait pourtant correct j'ai arbitrairement divisé par 10^14 toutes les coordonnées reçues depuis MySQL et là magie..)
bon allez bonne nuitée et merci pour tes réponses ;)