| Étrangeté à élucider. |
| Auteur |
Message |
Homer_Dalor
Autorisation : Membre
Nb de messages : 31
Inscrit le : Sam 22 Avr 2017, 16:00
|
Posté le : Sam 17 Jui 2017, 3:42
|
|
|
Bonjour à toutes et à tous.
Il y a de cela quelques minutes, je programmais tranquillement lorsqu'une erreur domaine étrange me parvint.
J'enquêtais donc sur le pourquoi du comment cet erreur était arrivé et ne trouvai point.
Je testais donc sans programme les calculs effectué, et j'ai remarqué une chose étrange. Voilà la partie qui pose problème :
| Code | | :Sous-chaîne("AAAAAAAAAAAAAA",1+13PartDéc(A/13),1 |
Vous remarquerez ici qu'il n'y a rien d'anormal à ce code.
Or si on le test avec un nombre au dessus de 13 et qui ne soit pas un multiple de 13, il y a une erreur.
Pour régler cela, je suis obligé d'ajouter un PartEnt comme ceci :
| Code | | :Sous-chaîne("AAAAAAAAAAAAAA",1+PartEnt(13PartDéc(A/13)),1 |
Est-ce normal ?
D'où peut bien provenir cette erreur ?
Voilà un mystère à éclaircir B|
|
 |
|
| |
Google_AdSense
|
Publicité
|
|
|
|
| |
Mingerton
Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
|
Posté le : Sam 17 Jui 2017, 16:34
|
|
|
En effet c'est bizarre ça, l'expression que tu donnes n'est pourtant jamais nulle. Tu as vérifié que tu avais bien 14 fois A dans la chaîne ? C'est la seule autre erreur de domaine qui peut intervenir.
Mais le fait qu'une partie entière inutile en théorie règle le problème est d'autant plus bizarre. Peut être un bug ? Je ne sais pas si il a déjà été signalé.
---------------------- Mes articles
Mes programmes en ligne (je termine peu de projets)
Guide traduction Algo-Basic, par Linkakro
Catalogue des fonctions 82/83/84 FR/EN |
 |
|
| |
Homer_Dalor
Autorisation : Membre
Nb de messages : 31
Inscrit le : Sam 22 Avr 2017, 16:00
|
Posté le : Sam 17 Jui 2017, 17:05
|
|
|
Coucou, dans la ligne de code, j'ai mis des A par flemme de mettre autre chose, mais je t'assure avoir une erreur en étant sûr à 100% que ça devrait marcher, et j'ai tester avec une chaîne plus longue, ça en revient toujours à la même erreur, même si le résultat donne un nombre entier, la calculette à l'impression qu'il y a un chiffre après la virgule et que le résultat n'est pas un nombre entier.
Tu peux tester aussi en mettant par exemple
Même si le résultat devrait donner L1(2), erreur dimension invalide.
Je ne pense pas que le problème ait été signalé, je n'ai rien trouver à ce sujet.
|
 |
|
| |
Mingerton
Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
|
Posté le : Sam 17 Jui 2017, 17:26
|
|
|
Ouais t'inquiète j'ai essayé ton code avec plusieurs chaînes moi aussi j'ai toujours cette erreur. Un petit problème avec la fonction fpart on dirait.
Sinon j'ai regardé d'autres codes utilisant ce type de fonction, apparemment c'est admis que le ipart est essentiel pour ne pas avoir d'erreur puisque tout le monde a l'air de le mettre sans se poser de questions. Le bug doit donc être connu depuis un bout de temps. Je vais fouiller un peu pour les raisons.
---------------------- Mes articles
Mes programmes en ligne (je termine peu de projets)
Guide traduction Algo-Basic, par Linkakro
Catalogue des fonctions 82/83/84 FR/EN |
 |
|
| |
m@thieu41
Autorisation : Membre
Nb de messages : 848
Inscrit le : Mer 18 Juil 2012, 18:44
|
Posté le : Sam 17 Jui 2017, 19:24
|
|
|
Ce n'est pas un bug à proprement parler.
Petit exemple:
1254/13 = 96.461...
(1254/13-96)*13 = 6.00...
Mais
(1254/13-96)*13-6 = -6E-12
Ceci est du à des erreurs d'arrondis, les expressions sont sockées d'une certaine façon, ce qui fait perdre en précision.
Du coup N*fPart(A/N n'est pas toujours exactement un entier sur les calculatrice (et plus largement dès que tu fais des calculs approchés avec des logiciels.
---------------------- Pour vous aidez dans vos débuts (et même ensuite ^^) :
*Tuto Algo->Ti Basic (par Linkakro) : Traduisez vos algo (de type algobox) en prgm pour votre TI!
*Catalogue des emplacements et traductions (anglais/français) des fonctions sur la TI.
*Faites vos propres programmes de maths (par ash)
Et au fait: la politesse n'a jamais tué personne  |
 |
|
| |
Ruadh
Autorisation : Membre
Nb de messages : 30
Inscrit le : Ven 06 Nov 2015, 14:08
|
Posté le : Mer 19 Juil 2017, 19:56
|
|
|
| Citer : Mingerton | Ouais t'inquiète j'ai essayé ton code avec plusieurs chaînes moi aussi j'ai toujours cette erreur. Un petit problème avec la fonction fpart on dirait.
Sinon j'ai regardé d'autres codes utilisant ce type de fonction, apparemment c'est admis que le ipart est essentiel pour ne pas avoir d'erreur puisque tout le monde a l'air de le mettre sans se poser de questions. Le bug doit donc être connu depuis un bout de temps. Je vais fouiller un peu pour les raisons. |
Le iPart ne fonctionne pas dans le cas où l'arrondi est inférieur au nombre entier voulu. Il faut donc plutôt arrondir à l'entier le plus proche. Par exemple (testé à l'instant) :
| Code | iPart(13fPart(16/13))=2
round(13fPart(16/13),0)=3 |
|
 |
|
| |