Welcome to %s forums

BrainModular Users Forum

Login Register

problème récurrent, précision et arrondi

j'ai besoin d'aide sur un patch
Post Reply
jeanrene
Member
Posts: 91
Location: Caen Normandy France
Contact:

Unread post by jeanrene » 16 Sep 2011, 12:03

voici un petit souci qui complique souvent la logique même de mes patchs, peut-être avez vous la solution

la fonction round arrondi à 1 près, j'arrive également à arrondir à 0,125 avec un patch simple
j'aimerai pouvoir arrondir à
0,1
0,01
0,001
0,0001
0,00001


exemple du problème:

(A/B)xB
avec A une valeur quelconque
et B (0,1 ou 0,01 ...)

le résultat n'est pas égal à A
or (A/B)xB=A

J'ai toujours cru que le "data out" fesait cet arrondi avec la fonction precision mais il ne semble que afficher cet arrondi mais envoi la valeur à rallonge.

exemple: 0,1=0.100000001490116

je suppose que ces valeurs à rallonge sont dues à la base même du fonctionnement d'usine (supposition seulement),
s'il n'y a pas de solution quelles sont les valaurs proches admises par usine,
par exemple en suposant que 0,125 est proche de 0,1 quelles sont les valeurs proches de
0,01
0,001
0,0001
0,00001
PatcherKit at work.

jeanrene
Member
Posts: 91
Location: Caen Normandy France
Contact:

Unread post by jeanrene » 16 Sep 2011, 14:55

bon au final en remaniant le fonctionnement de mon patch j'ai esquivé le problème (ou plutot j'ai laissé tombé mon idée de base).
si y'a une astuce je suis toujours interessé,

les valeurs admises que je recherchais n'existe pas, pour simplifier au maximum les patchs j'utilise les valeurs:
0.5
0.25
0.125
0.0625
0.03125

ces valeurs semblent faire des résultats moins anarchique.
PatcherKit at work.

djPESSOA
Member
Posts: 82
Contact:

Unread post by djPESSOA » 16 Sep 2011, 23:18

(A/B)xB
avec A une valeur quelconque
et B (0,1 ou 0,01 ...)

le résultat n'est pas égal à A
or (A/B)xB=A
Je ne suis pas spécialiste, mais ça doit venir du nombre de décimales considéré par usine (problème d'ailleurs identique sur n'importe quel calculateur) ?

Avec des valeurs simples de A (nombres entiers à 1 ou 2 chiffres), tu dois bien obtenir (A/B)*B = a quand même ?

Mais pour A une valeur qui utilise toutes les décimales utiles, en divisant par B (donc en multipliant par 10, 100, 1000...) tu perd 1, 2, 3... décimales de départ. D'où la différence finale.

D'un autre côté, si tu veux arrondir à 0,001 près, les décimales perdues ne devraient pas avoir d'importance, non ? La fonction round sur 1000*A ne te donne pas exactement ce que tu veux ?
I have no identity,
I have no age,
I am Pessoa.
http://partenulle.blogspot.fr/

jeanrene
Member
Posts: 91
Location: Caen Normandy France
Contact:

Unread post by jeanrene » 18 Sep 2011, 13:14

Merci pour ton aide djPESSOA ton post m'a donné une partie de la solution,
en effet en sortant des tout mes sous patchs un "data out" pour régler la "precision" de tout les éléments (obligatoire dans mon cas car la precision est variable), le problème disparait de lui même.
C'était simple mais j'y avais pas pensé avant.
Je voulais pas avoir l'air de dire du mal de usine je l'aime beaucoup ce logiciel,
mes critiques sont souvent le fruit de mon ignorance mais c'est un peu la raison de ce forum il me semble.
Merci à tous et bon patch...
PatcherKit at work.

Post Reply

Who is online

Users browsing this forum: No registered users and 8 guests