L'infini

vbnino Messages postés 218 Date d'inscription jeudi 13 juillet 2006 Statut Membre Dernière intervention 11 juillet 2010 - 6 juin 2007 à 17:37
 cs_rt15 - 11 juin 2007 à 08:49
Salut!

-Comme repprisenter la valeur "infini" dans vb6

Exemple pouir calculer les limite.

-Merci

59 réponses

Big200148 Messages postés 149 Date d'inscription mardi 30 septembre 2003 Statut Membre Dernière intervention 23 juillet 2009
6 juin 2007 à 17:43
Tu ne peut déjà pas les représenter en maths alors comment veut tu les représenter en info
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
6 juin 2007 à 18:07
ça existe déjà dans la représentation en flottant:
 (NaN = Not a Number)signe 0, exposant maxi, mantisse = 0 ==> NaN + infinisigne 1, exposant maxi, mantisse = 0 ==> NaN - infini

quant à l'utilisation c'est une autre histoire:
   NaN alertes (Signalling
NaN)
   provoque
l'arrêt immédiate du programme avec le déclenchement
d'une interruption

Daniel
0
fiko81 Messages postés 381 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 5 septembre 2010 3
6 juin 2007 à 18:09
Salut,
Je dirais que l'infini est un très grand nombre avant d'être l'infini.
Redargde déjà le plus grand nombre que tu peux programmer avec un PC.

Maintenant on peut philosopher pendant longtemps sur la chose, big200148 te donne un apperçu de l'abstrait.
Si tu considère que l'espace dans lequel on vit est infini, pose toi la question de savoir comment tu va rejoindre la fin.
Autre façon de voir les choses : l'info est un raisonnement logique (il faut imaginer des 1 et 0 de partout dans ton code ou encore des interrupteurs). L'infini n'est pas logique et est né avec l'imagination de l'être humain.

Après ce passage philosophique humoristique, on peut revenir à ton problème : accroches-toi
Un limite est une vue de l'esprit aussi. Donc l'homme à associé à cette vue d'esprit des règles :
1- L'infini est grand donc : (valeur finie)/infini=0 (en gros tu peux imaginer n'importe quelle grand nombre que tu veux, il en existera toujours un qui rend ta pensée infime )
2- L'infini est grand donc : infini/(valeur finie)=infini
3- L'infini est grand donc : infini^n /(infini^(n-1))=infini ou encore infini^(n-1) /(infini^n)
4- Problème : si l'infini venait à exister comment faire pour comparer à l'infini avec l'infini : d'où la naissance des formes indéterminées (l'esprit de l'homme est assez tordu). Mais l'homme est toujours fort : il existe des façons de contouner les formes indéterminées. Pour cela, je te conseil de te replonger dans test cours de math, je n'ai plus tout en tête.

En conclusion pour coder un être en développement, il suffit de donner les règles. Des outils le font déjà comme MAPLE. Cette tache est assez difficile car il ne faut oublier aucune condition.
Sur ce, bon courage et à bientôt pour d'autre avanture. Peut-etre que tu auras besoin d'aide pour les complexes

 Fiko ;-)

La reponse vous convient pensez > Accepter < <hr />
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
6 juin 2007 à 18:10
C'est faux Big200148, le standard IEEE754 prévoit l'encodage de valeurs exceptionnelles telles que l'infini. Ainsi pour un Double représenté par un exposant de 11 bits et une mantisse de 52 bits (et un bit de signe), lorsque l'exposant vaut 1024 on a :

Si la mantisse vaut 0 -> Le double représente +- l'infini (selon le bit de signe.) ou un dépassement de capacité, ce qui est par abus de langage plus ou moins la même chose...

Si au moins un des bits de la mantisse vaut 1 -> Le double ne représente pas un nombre (dit NaN : Not a Number). Souvent produit par une division par 0 ou simplement un résultat indéterminé.

Et pour la représentation en math, il s'agit d'un 8 couché

En .Net, qui respecte ces normes, on notterait d = Double.PositiveInfinity, mais plusieurs choses m'ont fais pensé que VB6 était à d'autres normes (en tout cas j'en suis sûr pour VBA qui a deux décimales significatives de moins que VBNet pour les double). Et je ne connais pas cette norme vu que je n'ai plus VB6 depuis .Net, jmfmarques ou un autre qui passe par ici saura surement te répondre...
Mais moi, je ne sais pas vraiment t'aider en fin de compte...
<hr size="2" width="100%" />Julien.
0

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

Posez votre question
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
6 juin 2007 à 18:36
c'est bien le standard IEEE754
je peux bien créer un nombre NaN représentant + infini
mais quelque soit le calcul, la valeur restera la même

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

    Dim B(7)   As Byte
    Dim infini As Double
   
    B(0) = 0
    B(1) = 0
    B(2) = 0
    B(3) = 0
    B(4) = 0
    B(5) = 0
    B(6) = &HFF
    B(7) = &H7F
   
    CopyMemory infini, B(0), 8
    MsgBox infini
    MsgBox 1 / infini      'devrait être zéro non ?

Daniel
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
6 juin 2007 à 19:12
Salut les copains,


D'abord bravo à fiko81 d'avoir su, en prétendant en parler, en parler réellement...

L'infini ne saurait en effet être une valeur et on ne peut même pas diviser l'infini par l'infini pour avoir 1 !

Tenter de jouer avec ? d'accord, mais dans ce cas à la manière de Devos (avec son rien qui n'était pas unrien puisque l'on peut toujours trouver des "moins que rien")
Alors ?
1) 1 / infini n'est pas 0, non ...mais une valeur infiniment petite et très voisine de 0
2) on admet  que l'infini est ce l'on pourrait imaginer comme résultat de la dicision de n'importe quel nombre par 0 


 
0
fiko81 Messages postés 381 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 5 septembre 2010 3
6 juin 2007 à 19:21
Ah Devos, s'il avait un pseudo sur ce forum j'aimerais bien lequel il choisirait, sinon je rejoins ton discours jmfmarques

 Fiko ;-)

La reponse vous convient pensez > Accepter < <hr />
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
6 juin 2007 à 20:28
Je ne suis pas d'accord avec toi jmfmarques, autant la valeur 0 est-elle définie comme nulle pur et dure, autant l'infini est défini tel que n'importe quel réel / infini = 0... Enfin on n'est pas là pour parler de math...
Moi je pense que le problème est que VB6 ne traite pas le calcul infini contrairement à .Net. Par exemple parce qu'une division par 0 en VB6 lèvera une exception tandis qu'elle attribuera la valeur NaN ou Infinity en .Net...

<hr width="100%" size="2" />Julien.
0
fiko81 Messages postés 381 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 5 septembre 2010 3
6 juin 2007 à 20:44
Je vais faire croire que je suis dure de tête mais pour reprendre ce que tu dis Julien237 "VB6 ne traite pas le calcul infini contrairement à .Net"
En fait, c'est plutot que .Net à intégré le fait qu'une division par 0 peut conduire non plus à une erreur mais à une solution que peut attendre l'utilisateur.
 Fiko ;-)

La reponse vous convient pensez > Accepter < <hr />
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
6 juin 2007 à 20:48
ben si VB6 traite plus ou moins bien les valeurs Nan
   (j'avais une erreur pour B(6) = &HF0)

    Dim x As Double
    Dim z As Double
   
    On Error Resume Next
    z = 0 / x
    MsgBox z     ' indéterminé
    z = 123 / x
    MsgBox z     ' infini
    On Error GoTo 0
   
    MsgBox 1 / z   ' zéro
    MsgBox z - z   ' provoque une erreur ????

Daniel
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
6 juin 2007 à 22:44
A discussion stérile : réponse brutale :

V = nombre infini
W = nombre également  infini 
Z = encire un nombre également  infini

équation dont on cherche les solutions dans R :

Y = Vx² + Wx + Z

Et maintenant qy'un malin (à l'aide du langage qu'il choisira) veuille bien me dire à quelles solutions il arrive (voire tout simplement déterminer s'il existe une solution dans R, à savoir si W²-4VZ est positif ou négatif)
Non; mais...
On redescend sur terre, oui ?
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
6 juin 2007 à 23:11
non pas de réponse,
ça correspond à ce que j'ai écrit:
    différence de 2 infinis ---> erreur
    division infini par infini --> erreur
sinon j'aurait dit je divise le tout par l'infini:
     (Vx² + Wx + Z) / infini  -->  x2 + x + 1   (pas de solution)

Daniel
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
6 juin 2007 à 23:21
En même temps chercher une réponse dans les réels avec des termes qui ne sont pas réels... Mais Gobillot a raison, V = W = Z = infini, on peut construire différentes expressions de l'infini, mais pas différents infinis.
Lorsqu'on résout une limite, on est parfois amenè à écrire des résultats intermédiaires qui font intervenir l'infini ou des divisions par 0 pour voir quelle technique utiliser pour résoudre le calcul. Par exemple utiliser le théorème de l'hospital lorsqu'on a une fraction du type 0/0 ou infini/infini. Mais le matheux n'écrira jamais

Lim(x->0) sin(x)/x = 0/0
Mais plutot
Lim(x->0) sin(x)/x = "0/0",

Les guillements indiquant qu'on a une expression du type 0/0. Mais une expression produisant 0/infini, n'est pas égale à 0/infini qui sont eux bien déterminés.

Après on continuera avec Lim(x->0) sin(x)/x lim(x->0) cos(x)/1 1
Ce qui n'a rien avoir avec 0/0 qui est indéterminé.
Tout ca pour dire que lorsque tu déclares v,w,z comme nombres soi-disants infini, tu ne fais que mettre la même chose et ils sont bien égaux. On peut donc bien simplifier par l'infini comme la fait Gobillot...
<hr width="100%" size="2" />Julien.
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
6 juin 2007 à 23:22
(clarification : "...produisant 0/infini, n'est pas égale à 0/infini..."
 Lire "0 ou l'infini" et non "0 sur l'infini"...)

<hr width="100%" size="2" />Julien.
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
6 juin 2007 à 23:33
Bon...
redevenons sérieux :
L'informatique s'est tout simplement installée (raisons de confort obligeant) dans une logique "finitaire" qui ne corresponds pas vraiment à ngrand chose. Et encore : elle a assorti ses propres limites à cette "logique finitaire de confort" ....

Les exemples seraient nombreux (des milliers) !
En voilà un tout bête :

Private Sub Command1_Click()
  Dim titi As Double
  toto = "8,33333333333333"
  titi = CDbl(toto)
  tata = titi * 3
  MsgBox tata
End Sub


Faites maintenant le calcul à la main, juste pour y voir clair...
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
6 juin 2007 à 23:39
Enlevez maintenant un seul des "3" et relancez... (alors, elle s'est offerte ou non cette "logique finitaire " ?)

Amusez-vous maintenant, au contraire, à en ajouter, des "3" ... et relancez ===>> tiens ! ===>> ou comment, pour des raisons de confort, ... on a ... ma foi... mis une feuille de vigne sur la crotte... (et personne ne s'en plaindra, mais.. Bon !.)
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
6 juin 2007 à 23:41
ça prouve que l'informatique a ses limites

et pour pouvoir palier a ses limites il faut trouver d'autres solutions

mais ce n'est pas toujours possible,
en espérant que l'évolution repousse ses limites, il faire avec ...


  Dim titi, toto, tata

 

  toto = "8,33333333333333"

  titi = CDec(toto)

  tata = titi * 3

  MsgBox tata

Daniel
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
6 juin 2007 à 23:45
Quel est le rapport avec notre infini ? Il a juste fallu discrétiser parce que contenir une logique infini n'était pas faisable...
Mais on est pas d'accord sur le concept de l'infini en informatique...
Tu veux dire qu'on ne peut faire avec ?
.Net calcule très bien avec des termes infinis et ca ne lui pose pas de problèmes...Ma foi il lèvera une exception pour les indéterminations habituelles infini - infini, ou infini * 0 etc... Mais il gère bien les infini * 5 infini, infini + 10 infini etc..
Exactement comme un humain le ferait...

<hr width="100%" size="2" />
Julien.
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
6 juin 2007 à 23:55
ça veut dire que l'informatique n'est pas parfaite,
elle a des défauts, surtout dans les calculs, à cause de la précision, qui sont parfois assez étrange, mais pourtant logique et explicable:
   Dim n As Double
   n = 267.28
   MsgBox 26728 - n * 100
l'informatique ne sait pas manipuler les grands nombres, mais l'homme non plus, il fait donc appel à l'informatique, ha bon ! c'est pas logique ça ...
ben si, il faut savoir utiliser les outils (clin d'oeil à jmf) même avec leurs défauts.

Daniel
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
7 juin 2007 à 00:00
"ça prouve que l'informatique a ses limites"
C'est vrai, mais je pense que les limites humaines sont plus limitatives que les limites informatiques.
Dans ce cas-ci la limite est la quantitié d'informations acceptable pour coder un nombre afin d'effectuer des calculs. Oui, c'est une technique, néanmoins n'importe quel programme de calcul formel pourrait choisir d'enregistrer
"8,3333333333....." (avec des ...) comme 25/3
Et les irrationnels alors ?
Et bien pareillement de la même manière que nous, on peut dire que exp(x) somme(n 0->infini) x^n/n!
Et il peut calculer tout cela et donner une réponse non pas approchée, mais en terme de fractions, de racines, etc... De nouveau exactement comme un humain le ferait...
Les limites sont données par les techniques que nous utilisons avec nos ordinateurs, mais je crois que tant que l'homme saura programmer, un ordinateur pourra faire ce que l'homme fait dans ce genre de domaines et ne sera donc limité que par les connaissances de l'homme...
Sur ce je vais aller dormir j'ai examen d'analyse demain...
Bonne nuit et merci pour la discussion...

<hr width ="100%" size="2" />Julien.
0