Ğ1v2: formule de réévaluation du DU

Suite à ce sujet sur l’autre forum: À propos de la formule - #62 par elois - Expression libre - Forum Monnaie Libre

J’ai décidé de modifier la formule de réévaluation du DU comme suis:

DU(t+1) = DU(t)+c2 (M(t+1) / N(t+1)) / 182,625

Sachant que Duniter applique : DU(t+1) = DU(t)+c2 (M(t) / N(t+1)) / 182,625

Le code de la nouvelle formule est ici: pallets/universal-dividend/src/lib.rs · master · nodes / rust / lc-core-substrate · GitLab

Je voulais que ça soit tracé sur ce forum, car c’est une information cruciale !

3 Likes

Je suppose que la division entière est arrondie à l’inférieur. Est-ce réfléchi ? Y a-t-il un avantage par rapport à l’arrondi au plus proche ?

Oui c’est une division euclidienne, cela est nécessaire pour que le calcul soit parfaitement déterministe, les flottant sont interdits dans le code du runtime, car ils ne sont pas déterministes, c’est pour ça qu’on utilise une arithmétique à virgule fixe:

https://substrate.dev/recipes/fixed-point.html

1 Like

Il doit bien y avoir un moyen d’arrondir au plus près, uniquement avec des entiers et de manière déterministe, avec une certaine précision. Par exemple tester (10*a/b)%10 >= 5, mais ça réduit la taille maximale des nombres supportés sans bug.

Mais bon ça n’a pas d’importance si l’unité a une faible valeur en Ğ1. (l’unité technique, on pourrait l’appeler satoği, satojune, june élémentaire, atome de ğ1…)

Edit: oui en fait faire ×10 ça revient à ajouter une décimale à la Ğ1, c’est se compliquer la vie.

3 Likes