1 != 1 - créer un bug ?
niahoo
Messages postés
247
Date d'inscription
Statut
Membre
Dernière intervention
-
niahoo Messages postés 247 Date d'inscription Statut Membre Dernière intervention -
niahoo Messages postés 247 Date d'inscription Statut Membre Dernière intervention -
yo,
voilà ce qu'on m'a montré il fut un temps. tout cela est correct en mathématiques mais ne marcherait en algo que si on pouvait représenter l'infini en informatique, je ne sais pas si c'est possible.
ce qui suit n'est pas un algorithme mais un calcul mathématique, l'opérateur '=' n'est donc pas un opérateur d'affectation mais bien un opérateur qui montre une égalité.
voilà je souhaitais surtout partager ce petit tour de passe passe, mais je voulais savoir si selon vous il était possible de l'implémenter dans un langage histoire de faire partir un processeur en sucette ;)
voilà ce qu'on m'a montré il fut un temps. tout cela est correct en mathématiques mais ne marcherait en algo que si on pouvait représenter l'infini en informatique, je ne sais pas si c'est possible.
ce qui suit n'est pas un algorithme mais un calcul mathématique, l'opérateur '=' n'est donc pas un opérateur d'affectation mais bien un opérateur qui montre une égalité.
on donne une valeur à notre unique variable 'x' (héhé en fait pour le coup c'est bien une affectation ) x = 0,999999999999999----à l'infini donc: 9 + x = 9,9999999999999999----à l'infini et: 10x = 9,9999999999999999----à l'infini donc: 9 + x = 10x et comme: 10x = 9x + x (et ça quelque soit la valeur de x de toute façons) alors: 9 + x = 9x + x donc: 9 = 9x si on divise cette égalité par 9, cela donne: 1 = 1x donc: x = 1 donc 0,9999999999ç----à l'infini = 1
voilà je souhaitais surtout partager ce petit tour de passe passe, mais je voulais savoir si selon vous il était possible de l'implémenter dans un langage histoire de faire partir un processeur en sucette ;)
A voir également:
- 1 != 1 - créer un bug ?
- Créer un compte google - Guide
- Comment créer un groupe whatsapp - Guide
- Créer un lien pour partager des photos - Guide
- Créer un compte gmail - Guide
- Créer un compte instagram sur google - Guide
6 réponses
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
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.
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.... ;)
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).
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
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 ? )
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
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~ ?
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; }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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.
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 ;)