Aller au contenu
Posté(e)
comment_125332

Bonjour

Pourquoi certains programmes de calcul numérique en génie civil, parfois ne répondent pas à ce qui est attendu ou donne des résultats inattendus ou illogiques même si les données de l'utilisateur sont correcte . Et il suffit de reprendre la manip pour que ça marche au deuxième tour :)  

Cdt   

  • Réponses 29
  • Vues 5.4k
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

Messages populaires

  • philkakou
    philkakou

    Le plus simple serait de définir une variable tolerance et vérifier si alpha se trouve dans la tolerance autour de la valeur de x En fait , le problème vient de la représentation numérique d'un n

  • Le problème est là. C'est quoi très petit? Puis quelle est la conséquence de ce très petit pour l’intersection des droites sur le très petit pour déterminer les points confondus? Puis sur le très peti

  • BELLAMINE
    BELLAMINE

    Exactement, et pour éviter ce piège dû à la machine que peut on proposé pour éviter ce bug très dangereux pour  la programmation informatique en calcul numèrique ? Cdt

recommended_posts

comment_125336

non je pense plutôt a des bug moins problématique du genre une fuite de mémoire par exemple,une variable qui n'est pas initialisée. Il est aussi possible qu'il y ai eu temporairement une insuffisance de mémoire lors du premier calcul

  • Auteur
comment_125350

Bonjour à tous

Je prend un exemple : voici le code source d'une fonction personnalisée que nous allons créer sous VBA Excel

Function TOTO(ByVal x As Variant) As Variant
Dim alpha As Variant
Dim i As Integer
alpha = 0
For i = 1 To 20
 alpha = alpha + x / 20
Next i
If alpha = x Then TOTO = alpha Else TOTO = "Faux"
End Function

Normalement quelque soit x TOTO devra normalement nous renvoyer x. Mais malheureusement pour x compris entre -4 et 4 et x<>0 le résultat est Faux.

D’après vous où se trouve le problème ?

Cdt

  • Auteur
comment_125354
il y a 43 minutes, lilhaq93 a dit :

:huh:...je vois pas.

Pour ma défense j'ai coder en VBa que pendant 2 mois.je fais plus du C++

Merci pour votre célérité

Ce pb est indépendant du langage de programmation !!! Il est spécifique à la machine : une machine restera tjrs et pour tjrs une machine. Notre sujet est comment contourner ce pb pour ne pas tomber dans ce piège, qui dans certains cas peut fausser les résultats attendus par un programme de calcul numérique en génie civil ou autres ? 

Le C++ est conçu pour les programme de calcul scientifique. Il est plus adapté que VBA, mais ce dernier est plus souple d'utilisation. 

J'ai une question pour la communauté : existe il un outil de compilation en .exe d'un code source en VBA Excel ?

Cordialement   

 

 

comment_125355

;)OK.

Dans ce cas je dirais que la raison pour laquelle cela ne fonctionne pas est que alpha est incrémenté par x/20 et qu'a la fin de la boucle alpha n'est pas égale à x. Cela est peut être dû au fait que x/20 donne une valeur pas très précise qui fait que 20*(x/20) donne une valeur très proche de x mais en étant différent de x.

  • Auteur
comment_125358
il y a 57 minutes, lilhaq93 a dit :

;)OK.

Dans ce cas je dirais que la raison pour laquelle cela ne fonctionne pas est que alpha est incrémenté par x/20 et qu'a la fin de la boucle alpha n'est pas égale à x. Cela est peut être dû au fait que x/20 donne une valeur pas très précise qui fait que 20*(x/20) donne une valeur très proche de x mais en étant différent de x.

Exactement, et pour éviter ce piège dû à la machine que peut on proposé pour éviter ce bug très dangereux pour  la programmation informatique en calcul numèrique ?

Cdt

comment_125360

Le plus simple serait de définir une variable tolerance et vérifier si alpha se trouve dans la tolerance autour de la valeur de x

En fait , le problème vient de la représentation numérique d'un nombre irrationnel

Modifié par philkakou

  • Auteur
comment_125368
Il y a 2 heures, philkakou a dit :

Le plus simple serait de définir une variable tolerance et vérifier si alpha se trouve dans la tolerance autour de la valeur de x

En fait , le problème vient de la représentation numérique d'un nombre irrationnel

Absolument

Nous allons détaillé cela ...

Cdt

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque: votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invités
Répondre à ce sujet…