Catégorie :
SupportForum :
TI-82 STATS.frVues : 968
Réponses : 5
Type : discussion
Etat : réponses autorisées
Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.
Étrangeté à élucider.
Homer_Dalor le 17/06/2017 à 03: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|
Mingerton le 17/06/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é.Homer_Dalor le 17/06/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 le 17/06/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.m@thieu41 le 17/06/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.Ruadh le 19/07/2017 à 19:56
Mingerton a écrit :
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
Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.