numbers
Je vous rassure, on va pas voir comment montrer que 1+1=3, mais plutôt pourquoi « b + a – b ≠ a ».
En fait, on va demander à l'ordinateur si b + a – b est égal à a, au moyen d'un petit programme. Ça permettra de mettre en évidence quelques faits à propos de la représentation des nombres dans un ordinateur.

On verra aussi que pour un ordinateur 0,9+0,8 est différent de 1,7.

b + a – b est différent de a



Voici le petit code source en C :

#include <stdio.h>
#include <math.h>

int main(void) {
    float a = pow(2,-10);
    float b = pow(2,59);

    if (a == b+a-b) printf("a et (b+a–b) sont égaux.");
    else printf("a et (b+a–b) ne sont pas égaux.");

    return 0;
}


Ce que fait ce programme :
- à une variable A je donne la valeur 2^(-10)
- à une variable B je donne la valeur 2^(59)
- je demande de comparer A et B+A–B, et d'afficher s'ils sont égaux si c'est le cas.

Mathématique, b+a-b = a, donc on s'attend à ce que le programme renvoie « a et (b+a-b) sont égaux ». Voyons si c'est le cas à l'exécution :
a et (b+a–b) ne sont pas égaux.


Alors que se passe t-il ?
Il faut savoir que l'ordinateur stocke les nombres dans un format précis. Ce format est un peu comme l'écriture scientifique en mathématiques : au lieu de mettre 42, on écrira +4,2 × 10^1. Pour l'ordinateur, cette écriture est appelée « virgule flottante ». Chaque élément du format d'écriture utilise un certain nombre de chiffres significatif : pour un nombre écrit sur 32 bit, il y a 1 bit pour le signe, 24 chiffres significatifs (24 bit) pour le nombre et 7 chiffres significatifs (7 bit) pour l'exposant (je ne le dit pas ici car il n'y en a pas besoin mais l'exposant et le nombre – aussi nommé « mantisse » – sont stockés en binaire dans la mémoire).

Autre chose : pour faire B+A–B, l'ordinateur utilise des priorités opératoires suivant l'ordre d'écriture, donc il fera ((B+A)–B). Voilà.

Ce qui se passe ici et qui est à l'origine de ce qui est a priori une erreur, c'est que l'addition de nombres d'ordre de grandeurs différents contribue à l'augmentation du nombre de chiffres significatifs.
Exemple : 4,0×10^5 + 1,0×10^0 = 4,000010×10^5. (on passe de deux nombres à deux chiffres significatifs à un nombre avec 7 chiffres significatifs).

Là où ça pose problème pour l'ordinateur, c'est quand le nombre de chiffres significatifs du calcul dépasse la valeur maximale autorisée : 24 en l'occurrence. L'ordinateur effectue une troncature et une erreur est faite lors du calcul (B+A) : Pour lui, A est tellement faible dans B+A, que ça ne tient plus dans la mémoire et il ne reste que B avec des zéros après. Donc B+A = B. Quand il continue son calcul, il retranche B, et ça fait 0.
Enfin, lors de la comparaison, il voit A et 0, qui sont différents d'où le message « A est différent de B+A–B ».

Pour contrer ce problème, il faut utiliser des formats de stockages adaptés. Au lieu d'utiliser les nombres à virgule flottant (float) sur 32 bits, on peut utiliser des nombres sur 64 ou 80 bits.

1.7 est différent de 0,9 + 0,8


Ce phénomène est repris d'un exemple de Sebsauvage, qui l'explique en Anglais.

Considérons le programme ici :
#include <stdio.h>

int main(void) {
    double a = 1.7;
    double b = 0.9+0.8;

    printf("a = %.1f", a);
    printf("b = %.1f", b);

    if (a == b) printf("a et b sont égaux.");
    else printf("a et b ne sont pas égaux.");

    return 0;
}

Ce qu'il fait :
- une variable A reçoit 1,7
- une variable B reçoit 0,9+0,8
- il affiche A puis B
- il nous affiche si A et B sont égaux ou non.

Là encore, mathématiquement, on devrait voir « a et b sont égaux ». Vérifions :
a = 1.7 
b = 1.7 
a et b ne sont pas égaux


Alors, où est l'arnaque ?

Vous ne le savez peut-être pas, mais 0,9 est une valeur exacte en base dix, mais pas en base deux ! Tout comme 12,5 est une valeur exacte dans l'ensemble ⅅ des nombres décimaux, mais pas dans l'ensemble ℕ des entiers naturels. Dans ℕ, 12,5 s'approche par 12.
Dans ℕ, il n'existe pas de valeur exacte de 12,5 (on peut toujours écrire 12 + 1/2, avec des chiffres appartenant à ℕ, mais on reste tout de même dans ⅅ).

De la même façon, en binaire, certains nombres (dont 0,9) n'ont pas de valeur exacte mais seulement une valeurs approchée. Du coup, lorsque l'on compare 1,7 et 0,9+0,8, à force d'erreurs d'arrondis, l'ordinateur ne voit pas la même valeur. Cette erreur est extrêmement faible (elle apparait peut-être à la 15ème ou 20ème digit binaire) mais elle suffit à tromper l'ordinateur, qui ne compare toujours que des nombres binaires.

Conclusion


J'ai trouvé assez amusant de constater ces « anomalies » de l'informatique. Je veux dire… On utilise tous les jours des nombres à virgule sur une calculatrice, pourtant la calculatrice est incapable de faire des calculs exacts avec ces nombres.

C'est tout comme le hasard… Facile à imaginer, mais impossible à générer pour un ordinateur seul.

image de lrargerich



26 commentaires

gravatar
Anne Onyme a dit :

Dans l'intro de ton article, il y a une boulette :
"b – a + b est égal à a" alors que c'est b + a - b ;o)

Du coup c'est malin, je comprenais pas ce que tu voulais dire ^^

gravatar
Iste a dit :

Conclusion

Un bon dev n'utilise pas ces type quand il a besoin de précision !

Le nombre de foi ou j'avais des 0.00000000007 en trop... rah !

gravatar
cellix a dit :

@ Anne Onyme : Il n'y a pas que cette coquille en début d'article. Même pour un humain, 0,9+0,7 est différent de 1,7.

gravatar
Gae a dit :

Bin non, pas encore corrigé ?
"mais plutôt pourquoi « b – a + b ≠ a »."
Ca devrait être b + a - b ?

gravatar
MC-SIN a dit :

Dès le jour où sont apparus les lettres dans les math à l'école, j'ai plus rien compris. Pourtant j'étais bon avant... :)

Sinon très bel exemple pour montrer que pour savoir coder, il n'y a pas besoin de s'y connaître en math!!! (LOL) Plus sérieusement, des fois on se tire des balles en prog avec ça...

gravatar
enloz a dit :

Quand on fait des programmes en C autre que les maths, les dépassement de capacité sont rares.

Moi ce que je trouve amusant c'est que l'on peut créer des type de format personnalisé.
Mais je trouve ça galère de trouver une lib et apprendre tous les types de format...

Bref, maintenant tu sais pourquoi la calculette ne dépasse jamais un plafond ni un seuil.


pour savoir coder, il n'y a pas besoin de s'y connaître en math!



Grave quand tu sais que la fonction, elle retourne "EXIT_SUCCES".


Plus sérieusement, des fois on se tire des balles en prog avec ça...



Jamais programmé un pistolet.

gravatar
Hod a dit :

Quelques petites précisions.

Ce que tu mets en avant c'est la précision machine. Il est impossible de dépasser une certaine quantité d'information concernant un nombre.
L'ordre de grandeur est de 10^-8 pour la simple précision, et de 10^-15 pour les doubles précisions.

Ce qu'il faut savoir c'est que faire un test de comparaison entre deux réels en machine n'a aucune signification puisque l'ensemble mathématique des réels est infini indénombrable. Ce qui pose problème c'est le indénombrable puisque tout nombre réel se décompose comme une suite infini d'élément appartenant à {0,...,9} et ne se terminant pas que par des 9 (sinon, l'ensemble devient dénombrable).
Or, il est impossible d'avoir une infinité d'information en informatique et donc d'avoir une représentation d'un réel.

Ceci dit, ce n'est pas gênant pour plusieurs raisons :
- 10^-14 ça laisse une bonne marge de manoeuvre en terme de précision pour obtenir des résultats précis.
- Comme je l'ai dis, une égalité entre deux réels n'a aucun sens si l'on ne peut pas les représenter correctement

Ton article omet cependant deux choses. J'ai dis que l'on ne pouvait pas garder une quantité infinie d'information. C'est pour ça par exemple qu'en traitement du signal on échantillonne le signal (via une transformée en Z pour des réponse en fréquence finie) afin de pouvoir reconstruire au mieux le signal.
Par contre, il existe bien une représentation de l'infini et du calcul mathématique dessus : c'est la norme IEEE suivie par Unix.
Un réel sera donc compris entre -10^38 et 10^38 en simple précision et 10^-308 et 10^308 en double précision.
Que veulent dire ces chiffres ? Et bien tout simplement que pour un nombre plus grand, l'ordinateur te répondra : +Inf ou -Inf, sous entendu plus ou moins l'infini.
C'est donc encore une approximation de la réalité car on sait bien que R est borné par plus ou moins l'infini et pas par 10^308 ou quoique ce soit d'autre.
C'est ce qu'on appelle l'arithmétique étendue, et qui peut donner lieu à des calculs sur des limites. Seul cas limite : Inf - Inf = Nan (Not a Number, qui correspond bien à une indétermination classique en étude de limites).

Enfin, tu ne parles pas du zéro machine qui est la plus petite quantité plus grande que zéro pour un ordinateur.
Il s'agit de 2^-23 en simple précision, 2^-53 en double et 2^-113 si l'on va jusqu'en quadruple précision, respectivement du 10^-8, 10^-16 et 10^-35.

C'est une quantité vraiment très importante à laquelle nous devons faire attention au moindre calcul afin d'éviter la perte d'information.

Voila un algo pour approcher ton machine epsilon :
#include <stdio.h>

int main( int argc, char **argv )
{
float machEps = 1.0f;

printf( "current Epsilon, 1 + current Epsilonn" );
do {
printf( "%Gt%.20fn", machEps, (1.0f + machEps) );
machEps /= 2.0f;
// If next epsilon yields 1, then break, because current
// epsilon is the machine epsilon.
}
while ((float)(1.0 + (machEps/2.0)) != 1.0);

printf( "nCalculated Machine epsilon: %Gn", machEps );
return 0;
}

Comme tu peux le voir, la précision machine découle directement du zéro machine.

gravatar
Celion a dit :

Bonjour,

Comme dit plus haut par Hod :
"10^-14 ça laisse une bonne marge de manoeuvre en terme de précision pour obtenir des résultats précis."

En fait avec ça on peut avoir des distances astronomiques (entre deux étoiles, deux galaxies), avec une erreur négligeable pour ce que fait notre technologie aujourd'hui (lire : pour l'instant). En effet, on prévoit toujours de la marge dans la construction dès qu'on dépend de ce genre de calculs, et cette marge est dimensionnée par un calcul d'erreur "tout bête".

Il faut aussi savoir que malgré le fait qu'un double soit codé sur 64 bits sur ma machine (et la plupart des autres machines), on utilise de plus gros calculateurs dès qu'on en a besoin.

Tu expliques bien comment un ordinateur apprend à compter, il a suffit aux électroniciens de faire de plus gros additionneurs/multiplicateurs, et le tour était joué :)

Bravo pour ton blog, bonne chance pour l'avenir.

gravatar
Le Hollandais Volant a dit :


- 10^-14 ça laisse une bonne marge de manœuvre en terme de précision pour obtenir des résultats précis.
- Comme je l'ai dis, une égalité entre deux réels n'a aucun sens si l'on ne peut pas les représenter correctement



Bien sûr, mais c'est là ce que je veux dire par « limite de la machine ».
Par exemple, pour un scientifique ou même n'importe quel être humain, le nombre Pi est le rapport du périmètre d'un cercle sur son diamètre. Essayons donc d'expliquer ça à un ordinateur…
Pour l'ordinateur, Pi c'est un nombre 3,141592… avec une certaine précision car ça ne tombe pas juste.


en traitement du signal on échantillonne le signal


Voilà une autre limite du numérique : l'infiniment grand d'au dessus est à comparer à l'infiniment petit ici.
L'analogique avait quelques avantages, sur ce point :D.


Enfin, tu ne parles pas du zéro machine qui est la plus petite quantité plus grande que zéro pour un ordinateur.


Non, car j'avais pas réfléchi à ça. Je connaissais le 10^308 comme l'infini (selon IEEE), mais pas concernant la limite du coté de l’infiniment petit.
Merci de l'info.

Toutes ces infos sur l'infini me rappelle une bonne blague à faire aux non-matheux, concernant les limites finies d'une suite infinie :D. Ça sera pour le premier avril :D.

@Gae : *sigh*
Anéfé, je vais corriger tout ça… Décidément, je crois que j'en perd moi même mon binaire :D.

@Celion :


Tu expliques bien comment un ordinateur apprend à compter, il a suffit aux électroniciens de faire de plus gros additionneurs/multiplicateurs, et le tour était joué :)

Bravo pour ton blog, bonne chance pour l'avenir.



Fini + fini = fini, donc même avec un ordinateur plus gros, on aurait une limite plus grande, mais une limite quoi qu'il en soit.
N'oublions pas d'ailleurs qu'à l'époque ils auraient pu faire des processeurs 64 bit dés le début, pour palier aux limites du 32 bit et du 16 bit. Mais je pense qu'ils se dirent que 64 bit aurait été largement overkill (qui à l'époque aurait songé un seul instant qu'on aurait un jour des ordinateurs avec 4 Gio de RAM dans tous les foyers, alors que le plus puissant calculateur de l'époque devait avoir quelques méga-octets comme stockage de masse…).

Autrement, merci :)

gravatar
Hod a dit :

En physique pi vaut 3.14 plus un certain nombre de chiffres significatifs en fonction de l'application.
En ingénierie, c'est plus proche d'une suite de fraction continue : 3 + 1/7 + ... encore une fois en fonction de la tolérance que l'on accorde à l'application.
En mathématique, pi, c'est pi, tout simplement.

En mathématique, l'ordinateur n'a rien à y faire. Quand on résous un système linéaire, on le fait à une des deux autres finalités citées en premier, et on se moque bien de la rigueur mathématique derrière.
J'ai la double casquette de l'ingénieur et du mathématicien, comme j'ai déjà pu le dire dans un autre commentaire et il est intéressant de voir comme en tant qu'ingénieur on travaillera plutôt sur des logiciels de calculs numériques comme Matlab qui donne des approximations, tandis qu'en tant que mathématicien, si tant est si bien que l'on veuille utiliser un ordinateur, on utilisera plutôt un logiciel de calcul formel comme Maple qui lui ne laisse aucune place à l'erreur.

Une autre chose : dans les méthodes numériques que l'on a, on sait très bien faire une majoration de l'erreur avant même d'appliquer sur machine et bien souvent cela dépend bien plus des données du problème que des limitations de précisions de la machine.
Une matrice mal conditionnée peut donner des résulats totalement aberrant alors que l'ordinateur nous donne une solution avec une précision de 10^-7 : http://fr.wikipedia.org/wiki/Conditionnement_(analyse_num%C3%A9rique)

Bref, c'est pour moi un faux problème pour la plupart des gens, et même en l'état actuelle de connaissances, cela ne pose pas trop de problèmes.
Il est sur que même pour un simple calcul de combinaisons, il est intéressant de savoir comment fonctionnement la précision machine afin d'éviter des erreurs assez inattendues. :p

Quelle est donc cette blague ?

gravatar
Hod a dit :

Et pour l'histoire de l'échantillonnage : ça ne pose aucun soucis. L'échantillonnage, par exemple d'une musique, est faite de sorte que la perception humaine en reste inchangée : cad reconstruction parfaite entre 20Hz et 20kHz.

Enfin, le MP3 est relativement destruction quand même, donc changez de format, pour le bien de vos oreilles.

Tout ça n'est qu'une question de perception humaine et des applications qui en découlent.

gravatar
Le Hollandais Volant a dit :


L'échantillonnage, par exemple d'une musique, est faite de sorte que la perception humaine en reste inchangée


Bien-sûr bien-sûr, mais sur une image par exemple, sur une photographie argentique, il est théoriquement possible de zoomer à l'infini (jusqu'à atteindre les atomes / longueurs d'ondes des couleurs). C'est pas possible sur les images numériques.

La blague, c'est par exemple lors qu'on traverse la route :
- on commence par traverser la moitié de route, et on s'arrête.
- il reste donc 1/2 route à traverser.
- on traverse ensuite la moitié du chemin restant, et il reste après cela 1/4 de la route.
- on traverse ensuite constamment la moitié du chemin restant. D'une certaine logique, le piéton n'arrivera jamais de l'autre coté, car il restera toujours une fraction de la route à traverser.
Pourtant, si on veut traverser la route, on y arrive sans problèmes :).

Idem quand on a un biscuit : si on commence par manger la moitié, puis la moitié de ce qui reste, et ainsi continuellement, à la fin il restera toujours quelque chose. Ben moi si je mange le biscuit, il reste rien à la fin, sans pour autant démonter toute les Mathématiques :D.

Ce problème est parfois posé comme énigme, et parait déroutant au début :-)
Évidement, ça vient du fait que la somme des termes d'une suite dont le terme principal est de la forme 1/(2^n) n'est pas infini, mais fini et égal à 1.

gravatar
Hod a dit :

La blague s'appelle très exactement le paradoxe des grecs et s'énonce de manière historique de cette manière :
Prenons un segment de longueur l fixé. Le segment est constitué de points de longueur 0, par définition. Comment se fait-il qu'une somme de longueur 0 fasse une longueur l ?

Et bien les grecs n'avaient pas la théorie suffisante pour montrer qu'il n'y a aucun problème mathématique là dedans. Il faudra attendre Henri Lebesgue en 1900 pour voir apparaître la théorie de la mesure.
Ton segment est [0,1] à plus ou moins une translation. Quelque soit un point appartenant à ton segment, sa longueur est nulle (pour rappelle la longueur est la mesure des réels).
R est un espace mesurable, seulement par définition, il n'est stable que par union dénombrable.
Or, l'union des singletons de [0,1] n'est pas une union dénombrable par [0,1] n'est pas dénombrable (et je te passe cette démonstration. Si elle t'intéresse, va voir l'argument diagonal sur Wikipédia).

Il n'y a donc aucune raison d'appliquer la sigma-additivité et donc aucune raison pour que l'énoncé de ta blague soit juste ou même supposé juste.

gravatar
Hod a dit :


Or, l'union des singletons de [0,1] n'est pas une union dénombrable car [0,1] n'est pas dénombrable (et je te passe cette démonstration. Si elle t'intéresse, va voir l'argument diagonal sur Wikipédia).


Coquille. :')

gravatar
Le Hollandais Volant a dit :


Le segment est constitué de points de longueur 0, par définition.


Pas trop convaincu pour moi (après je raisonne comme un physicien). Elle est peut-être constituée de points, mais ça ne peut pas être la somme de points. Telle que je l'ai énoncé, il s'agit de sommes des longueurs, à chaque fois divisées par deux (ou alors on ne parle pas de la même chose).

gravatar
Hod a dit :

Et bien ta table est constituée de point, ton biscuit également, ta voiture, ton écran de PC, etc.
Je me suis simplement ramené au cas le plus simple : R.

Si ce n'est pas la "somme" de tous ces points, je ne sais pas ce que c'est...
Prend l'ensemble des naturels, et un segment sur celui-ci, par exemple [1,3]. Alors, [1,3] = {{1},{2},{3}}, pareil pour R, sauf que cette fois ce n'est pas dénombrable, d'où l'ambiguïté et l'impossibilité de faire une union stable de tous ces éléments.
Il n'en demeure pas moins que ton segment sur R est constitué de la réunion de tous les points.

gravatar
Le Hollandais Volant a dit :


Prend l'ensemble des naturels, et un segment sur celui-ci, par exemple [1,3]. Alors, [1,3] = {{1},{2},{3}}


Ah, ok. Oui, mais moi je raisonnais sur les objets mais de façon "continues".

L'ensemble des entiers naturels remis dans N (vu que N est inclu dans R) n'est pas continue (si on peut dire ça d'un ensemble).
Vu qu'on est dans R, on peut trouver des éléments dans [1,2] de N par exemple (1,2 de R, 1,33 de R, etc.).

Moi je vois mon objet "physique" (donc mon biscuit ou la route à traverser) comme une somme de distances à traverser. Où ce n'est plus chaque point qui compte, mais les distances entres les points. Un peu comme une image numérique avec des polygones : les points sont là, mais quand on les relie, l'image est visible de façon plus concrète. Je sais pas si je suis clair.

Pour moi, un objet n'est pas seulement formé de points, mais de points reliés (physiquement ou virtuellement), donc présentant une certaine continuité à mes yeux.

gravatar
Erwan a dit :

Pour info : le paradoxe des grecs est en fait le paradoxe d'Achille et de la tortue, formulé par Zénon d'Élée.

Le héros grec Achille a disputé une course à pied avec le lent reptile. Comme Achille était réputé être un coureur très rapide, il avait accordé gracieusement à la tortue une avance de cent mètres.

Si la tortue a de l'avance sur Achille, celui-ci ne peut jamais la rattraper, quelle que soit sa vitesse ; car pendant qu'Achille court jusqu'au point d'où a démarré la tortue, cette dernière avance, de telle sorte qu'Achille ne pourra jamais annuler l'avance de l'animal.

Zénon d'Élée affirme donc que le rapide Achille n'a jamais pu rattraper la tortue. « En effet, supposons pour simplifier le raisonnement que chaque concurrent court à vitesse constante, l'un très rapidement, et l'autre très lentement ; au bout d'un certain temps, Achille aura comblé ses cent mètres de retard et atteint le point de départ de la tortue ; mais pendant ce temps, la tortue aura parcouru une certaine distance, certes beaucoup plus courte, mais non nulle, disons un mètre. Cela demandera alors à Achille un temps supplémentaire pour parcourir cette distance, pendant lequel la tortue avancera encore plus loin ; et puis une autre durée avant d'atteindre ce troisième point, alors que la tortue aura encore progressé. Ainsi, toutes les fois qu'Achille atteint l'endroit où la tortue se trouvait, elle se retrouve encore plus loin. Par conséquent, le rapide Achille n'a jamais pu et ne pourra jamais rattraper la tortue ».

Pour plus de détails, se reporter à l'article correspondant sur Wikipedia (http://fr.wikipedia.org/wiki/Paradoxe_d%27Achille_et_de_la_tortue).

gravatar
Erwan a dit :

Un autre paradoxe formulé par Zénon d'Élée est le paradoxe de la flèche :

Une flèche lancée est toujours immobile : en effet, tout corps est soit en mouvement soit en repos quand elle se trouve dans un espace égal à son volume ; or la flèche se trouve à chaque instant dans un espace égal à son volume.

Imaginons une flèche en vol. À chaque instant, la flèche se trouve à une position précise. Si l'instant est trop court, alors la flèche n'a pas le temps de se déplacer et reste au repos pendant cet instant. Maintenant, pendant les instants suivants, elle va rester immobile pour la même raison. La flèche est toujours immobile et ne peut pas se déplacer : le mouvement est impossible.

Ce paradoxe traduit toute la difficulté conceptuelle liée à la notion de vitesse instantanée. Toute vitesse nécessite d'associer un déplacement à un intervalle de temps. Si cet intervalle de temps est nul, il ne peut y avoir de déplacement, ce qui rend apparemment impossible le calcul d'une vitesse.

Il faudra attendre l'essor de l'analyse, et par elle celui du calcul infinitésimal, pour résoudre ce paradoxe.

Au delà de sa signification mathématique, ce paradoxe renferme de profondes interrogations physiques et métaphysiques sur la nature du mouvement. La physique classique, et en particulier la mécanique analytique, a répondu à ces interrogations en introduisant le concept de quantité de mouvement, dont l'existence est indépendante de la position et du temps.

Il est intéressant de remarquer qu'avec la mécanique quantique, le paradoxe de la flèche a retrouvé une certaine pertinence, dans la mesure où il exprime la contradiction entre les concepts de position et de vitesse, contradiction qui n'est pas sans évoquer le principe d'incertitude. Une formulation rigoureuse du paradoxe a d'ailleurs été appelée effet quantique de Zénon, qui s'applique à une observable quantique quelconque, et qui consiste à dire que lorsqu'on effecue N mesures de cette observable dans un intervalle de temps t, la probabilité de trouver un système dans le même état après cet intervalle de temps, tend vers 1 lorsque N tend vers l'infini.
cf. http://fr.wikipedia.org/wiki/Paradoxe_de_la_fl%C3%A8che

gravatar
Hod a dit :

@Le Hollandais Volant :
Ah, ok. Oui, mais moi je raisonnais sur les objets mais de façon "continues".

Je t'ai juste fait l'analogie avec l'ensemble des naturels pour que tu vois la manière dont est défini un segment : c'est l'ensemble des points qui le constitue. Que ce soit la définition en géométrie euclidienne, hyperbolique ou autre, ou une définition à l'aide de barycentre, c'est toujours un ensemble de points.

Quand à ta notion du continue, voila de quoi la mettre à mal : http://fr.wikipedia.org/wiki/Hypoth%C3%A8se_du_continu

Tu serais surpris de savoir qu'il y a des infinis plus infini que d'autres.
Il y a plus d'éléments dans N que dans R alors que les deux ensembles sont infinis. De même que Q est dénombrable alors qu'il est infini et qu'il y a un éléments appartement à Q entre chaque éléments appartenant à R alors que R n'est pas dénombrable...

Bref, la seule différence entre N et R c'est que tu peux dénombrer N mais pas R. Qu'est-ce qu'un ensemble infini dénombrable ? C'est un ensemble dont tu peux trouver une bijection de N vers lui même. En d'autres termes, que tu puisses l'indexer par N.
N est donc forcément dénombrable, mais R ne l'est pas, par l'argument diagonal.

La notion de distance n'existe que sur des espaces métriques. Une généralisation des espaces métriques, c'est un espace mesurable ou plutôt topologique, m'enfin passons.
Ta représentation de points reliés par des polylignes ressemble plus à des graphes dans lesquels aucune notion de distance n'existe.
De plus tu te contredis : des points reliés physiquement ou virtuellement. Donc, par quoi sont-il reliés ? S'ils sont reliés par autre choses que par eux même, par définition ton milieu n'est plus continu.

Un milieu sera continue si justement tu peux toujours intercaler un autre point entre deux points, ce qui n'est du tout le cas avec cette représentation.

gravatar
bilal a dit :

@Hod:


Il y a plus d'éléments dans N que dans R



C'est plutôt l'inverse ...

(PS: C'est la fête de la coquille aujourd'hui ?)

gravatar
tester a dit :


Toute vitesse nécessite d'associer un déplacement à un intervalle de temps. Si cet intervalle de temps est nul, il ne peut y avoir de déplacement, ce qui rend apparemment impossible le calcul d'une vitesse.



Ouais mais manque de peau, ta théorie ne sert à rien contre les radars...

gravatar
LooOoo a dit :

Salut tous,

C'est pas nouveau, mais il faut le rappeler.


Mettez une variable :

i = 1.1


et faites simplement

print i



pas besoin du moindre calcul !

gravatar
Le Hollandais Volant a dit :

@LooOoo : euh… j'ai pas tout compris :
~ $ python
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> i = 1.1
>>> print i
1.1
>>>


Ça fait ce que ça doit faire non ?

gravatar
Celion a dit :

Citation :
Toute vitesse nécessite d'associer un déplacement à un intervalle de temps. Si cet intervalle de temps est nul, il ne peut y avoir de déplacement, ce qui rend apparemment impossible le calcul d'une vitesse.

Les limites "pallient" à ce problème. On pourra faire dire à un mathématicien que si l'intervalle de temps tend vers 0, la vitesse tend vers l'infini (je sais, le Nobel c'est pas pour tout de suite). Un physicien dira, lui, qu'un temps nul n'existe pas dans la physique classique (pas encore de Shrödinger sur ce sujet pour moi).
Un ordinateur n'a tout simplement pas la possibilité de se représenter ce concept sauf si on demande à Maple de le faire par exemple.
Et il le fera de la même manière que quand on apprend au C à compter au delà de DOUBLE_MAX avec un système de structures de bits (ou de char, ou de long, tant qu'on adapte les opérations bit à bit). Et c'est encore plus simple à faire avec un langage OO où le cadre est déjà fait.

Tout ça pour dire que je retombe sur mes pattes par rapport à ce que, je pense, j'ai mal exprimé dans mon premier post : On pourra toujours affiner la profondeur de calcul d'un ordinateur (aujourd'hui beaucoup de monde est équipé en 64bits, mais combien les gros calculateurs peuvent-ils traiter à la fois?), mais jamais arriver à l'infini.

* Me voilà en train d'imaginer une machine avec un processeur de la taille de plusieurs univers, enfin mon chargement de Warcraft3 se fera vraiment vite ! *

Et c'est bien grâce à ça qu'il reste encore du travail aux ingénieurs d'ailleurs.

Enfin, j'ajoute une touche presque philosophique à ce raisonnement : le fait qu'on soit limité par nos propres constructions nous pousse à toujours les améliorer. Grand bien nous en fasse, nos cerveaux seront deux fois plus gros dans 10^4 années !
On peut aussi mettre tout ça en parallèle avec la citation d'Einstein de ton article sur l'Ether (très bon d'ailleurs, j'ai constaté la même chose dans un bouquin d'électronique récupéré de mon super-papy). Einstein avait bien compris cette course en avant perpétuelle.
Pourvu que la science sache éviter les murs mieux que la politique ou la religion :)

Les commentaires sont fermés pour cet article