| division par zero et variable du type a=1.123e+12 | |
|
|
Auteur | Message |
---|
silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: division par zero et variable du type a=1.123e+12 Sam 28 Mar 2015 - 18:30 | |
| Bonjour à tous, comment traitez vous la division par zéro? Je ne veux pas que mon programme s'arrête quand il tombe sur une division par zéro, alors j'aimerais savoir s'il existe une commande pour désactiver l'affichage d'erreur. Pour l'instant, j'exploite ce qui me semble être un bug pour contourner ce problême, mais c'est un peu "lourd" à mon goût. - Code:
-
' creation d'un nombre négatif très grand dim big_number,bn%,i% bn%=adr(big_number) poke bn%,127 for i%=1 to 5 poke bn%+i%,255 next i% poke bn%+6,239 poke bn%+7,255 free i% free bn%
dim tmp$,tmp,result
' ne retourne aucune erreur??? tmp$=1/0
' traitement zero_div(tmp$)
' affichage result=tmp print result
end SUB zero_div(myvar$) ' if numeric(myvar$)=1 tmp=val(myvar$) else if len(myvar$)=4 ' -INF tmp=big_number else ' INF tmp=0-big_number end_if end_if end_sub
et aussi y a t-il un moyen de créer des variables du type a=1.123e+12? | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: division par zero et variable du type a=1.123e+12 Sam 28 Mar 2015 - 18:42 | |
| Tu as sûrement tenté la commande ON_ERROR_GOTO, mais elle ne suffit pas, ici. Cette erreur n'est pas interceptée par cette commande. Mais il y a une solution: tu peux tester la numéricité du resultat, avant de le calculer pour de bon. Et le test de numéricité est bien soumis à l'interception de l'erreur par ON_ERROR_GOTO. Voici comment faire: - Code:
-
label bad dim i% on_error_goto bad i% = numeric(1/0) : ' <===== cette ligne déclenche l'erreur i% = 1/0 : ' <===== alors que cette ligne planterait si elle n'était pas précédée par le test off_error_goto end bad: off_error_goto message "Panoramic: erreur en division par 0" end
| |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: division par zero et variable du type a=1.123e+12 Sam 28 Mar 2015 - 20:13 | |
| - Silverman a écrit:
- et aussi y a t-il un moyen de créer des variables du type a=1.123e+12?
La réponse est oui : mais on doit utiliser la fonction POWER - Code:
-
dim a a = power(1.123,12) : print a : ' c'est l'équivalent de 1.123e+12 a = power(10,0-10 ) : print a : ' c'est l'équivalent de 10e-10 a = power(123,123 ) : print a : ' c'est l'équivalent de 123e+123 a = power(123,0-123): print a : ' c'est l'équivalent de 123e-123
REMARQUE : En Panoramic, quand on utilise le moins unaire, on doit le précéder par 0 exemple : POWER(10,-5 ) === > erreur Il faut faire POWER(10,0-5) | |
|
| |
Mumu
Nombre de messages : 176 Localisation : 45 Date d'inscription : 20/12/2012
| Sujet: Re: division par zero et variable du type a=1.123e+12 Sam 28 Mar 2015 - 22:54 | |
| Bonjour tout le monde Je viens de constater la chose suivante. Je voulais compléter le post de Papydall en signalant le fait qu'on peut écrire : a = val(1.234e12) Avec les versions -> 9.25 de Panoramic, ça marche très bien. Avec la 9.26... ça ne marche plus ! Voulu ? Auquel cas c'est dommage ! Je vais avoir plein de programmes qui ne marchent plus | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: division par zero et variable du type a=1.123e+12 Sam 28 Mar 2015 - 23:42 | |
| Je ne pense pas que ce soit voulu, mumu ! C'est un bug, et en tant que tel, poste-le dans la section des bugs ! La version 26i5 a à l'évidence un certain nombre de problèmes... | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: division par zero et variable du type a=1.123e+12 Dim 29 Mar 2015 - 1:27 | |
| - Mumu a écrit:
- Bonjour tout le monde
Je viens de constater la chose suivante. Je voulais compléter le post de Papydall en signalant le fait qu'on peut écrire : a = val(1.234e12) Avec les versions -> 9.25 de Panoramic, ça marche très bien. Avec la 9.26... ça ne marche plus ! Voulu ? Auquel cas c'est dommage ! Je vais avoir plein de programmes qui ne marchent plus
Détrompe-toi Mumu. Il n’y a rien de changé avec cette notation : ça marche toujours et tu n’auras aucun besoin de modifier tes anciens programmes si vraiment ils marchaient. Tu as tout simplement oublié de mettre l’expression entre guillemets ! Voici comment faire - Code:
-
a = val("1.234e12")
Et ça marche. Parole de Papydall EDIT Curieusement ce code marche aussi - Code:
-
dim a a = "123e123" : print a a = "123E123" : print a a = "123e-123" : print a a = "123" : print a * 2 a = "1" + "2" : print a : ' ça donne 12 : une concaténation, pas une addition print a/3 : ' ça donne 4
Je trouve que c’est simplement bizarre! | |
|
| |
Mumu
Nombre de messages : 176 Localisation : 45 Date d'inscription : 20/12/2012
| Sujet: Re: division par zero et variable du type a=1.123e+12 Dim 29 Mar 2015 - 12:47 | |
| Hello @Papydall J'ai fait une petite erreur dans mon post. Les guillemets sont bien présents et le code ne marche pas ! du moins en ce qui concerne 9.26. Avec les versions antérieures ça marche sans problème. @Klaus Ok. je vais donc le signaler comme bug | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: division par zero et variable du type a=1.123e+12 Dim 29 Mar 2015 - 15:09 | |
| Et pourtant ça marche avec la version 0.9.26i5 du 7 janvier 2015! | |
|
| |
Mumu
Nombre de messages : 176 Localisation : 45 Date d'inscription : 20/12/2012
| Sujet: Re: division par zero et variable du type a=1.123e+12 Dim 29 Mar 2015 - 15:22 | |
| Ah ! c'est peut être un début d'explication... Moi j'ai la 9.26i3 ! Je recherche la bonne et je teste Edit : Euh... Quelqu'un peut me dire où je peux trouver cette version ? | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: division par zero et variable du type a=1.123e+12 Dim 29 Mar 2015 - 15:37 | |
| La version 0.9.26i3 ne reconnait par le POINT DECIMAL : elle ne reconnait que la VIRGULE DECIMALE. c'est un bug qui est corrigé. Teste ceci et ça marchera en version 0.9.26i3 - Code:
-
a = val("1,234e12") Pour la version 0.926i5, c'est iciLa version 0.926i5 permet d’utiliser soit le point soit la virgule comme séparateur décimal - Code:
-
dim f$ f$="123.456" print val(f$) separator_is_comma f$="123,456" print val(f$) separator_is_point f$="123.456" print val(f$) | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 29 Mar 2015 - 16:49 | |
| Pour la division par 0, n' est il pas plus simple de vérifier que le diviseur n' en soit pas un...de 0 ?
if diviseur%=0 détournement else division end_if | |
|
| |
silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: division par zero et variable du type a=1.123e+12 Dim 29 Mar 2015 - 19:15 | |
| @papydall - Citation :
dim a a = power(1.123,12) : print a : ' c'est l'équivalent de 1.123e+12 a = power(10,0-10 ) : print a : ' c'est l'équivalent de 10e-10 a = power(123,123 ) : print a : ' c'est l'équivalent de 123e+123 a = power(123,0-123): print a : ' c'est l'équivalent de 123e-123
pas d'accord, power(A,B) correspond à A puissance B, et pas à A*(10 puissance B). C'est la solution proposé par mumu que je retient, c'est exactement ce que je cherchais. - Citation :
Curieusement ce code marche aussi
Code: dim a a = "123e123" : print a a = "123E123" : print a a = "123e-123" : print a a = "123" : print a * 2 a = "1" + "2" : print a : ' ça donne 12 : une concaténation, pas une addition print a/3 : ' ça donne 4
Je trouve que c’est simplement bizarre!
du coup: - Code:
-
dim a$ a$=1+2 print a$ : ' ça donne 3
ça ne me parait plus bizzare! @Klaus en fait, je ne veux pas que le programme se termine, même si le résultat est une division par zéro. J'utilise numeric(V$) dans le code que j'ai posté, mais je ne savais pas que l'on pouvait utiliser numeric(V) directement avec des expressions numériques. @ygeronimi effectivement, c'est le plus simple. Je pense que vais adopter ça. Je ferais au cas par cas, puisque tan(pi/2) ne retourne pas d'erreur(je me doute que c'est dû au nb de chiffres apres la virgule, de pi) ce qui m'arrange bien, alors que acos(2) retourne bien une erreur. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: division par zero et variable du type a=1.123e+12 Dim 29 Mar 2015 - 19:24 | |
| @silverman: - Citation :
- @Klaus
en fait, je ne veux pas que le programme se termine, même si le résultat est une division par zéro. J'utilise numeric(V$) dans le code que j'ai posté, mais je ne savais pas que l'on pouvait utiliser numeric(V) directement avec des expressions numériques. Evidemment, le programme ne doit pas se terminer... Je l'ai juste codé comme ça en quelques lignes, pour montrer l'interception de l'anomalie par ON_ERROR_GOTO sur la fonction NUMERIC(...), alors que sur le calcul direct d'une expression, cette interception ne marche pas. Retiens juste que ON_ERROR_GOTO suivi de NUMERIC(...) permet de capter toute anomalie numérique. | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: division par zero et variable du type a=1.123e+12 Dim 29 Mar 2015 - 20:35 | |
| @Silverman Tu as parfaitement raison. Je me demande comment j’ai pu écrire une telle monstruosité ! Je m’excuse humblement. Voici comment faire - Code:
-
dim a a = 123*power(10,5) : print a : ' 123E5 = 12300000 a = 0.0001*power(10,4) : print a : ' 0.0001E4 = 1 a = power(10,0-10) : print a : ' 1E-10 | |
|
| |
Contenu sponsorisé
| Sujet: Re: division par zero et variable du type a=1.123e+12 | |
| |
|
| |
| division par zero et variable du type a=1.123e+12 | |
|