Nombre de chiffres requis pour le DU

Etant donné le constat expérimental qui va au centime utilisé dans d’autres monnaies, ayant un nombre de digits de 9999,99 maximum par mois très largement suffisant pour un DU mensuel efficace, soit 6 digits / mois on peut calculer le nombre de chiffres requis pour un DU selon la période de temps considérée :

  • DU mensuel : 9999,99 soit 6 chiffres suffisants.
  • DU annuel : 9999,99 x 365,25 = 3652496,34 soit 9 chiffres suffisants (mais fréquence hors sujet)
  • DU journalier : 9999,99 / 30 = 333,33 soit 5 chiffres suffisants
  • DU horaire : 9999,99 / 30 / 24 = 13,88 soit 4 chiffres suffisants

Pour des raisons de contrôle humain d’une part, et de quasi-continuité d’autre part, la journée semble bien être l’unité de mesure la plus appropriée pour la génération d’un DU, qui peut donc suffire avec 5 chiffres efficaces.

Par ailleurs le passage en roulement de puissances de 10, peut le faire dépasser 5 chiffres, pour retomber sur 5 :

  1. DU(0) = 100,00
  2. DU(1) = 110,00

  3. … 25. DU(24) = 984,97
    … 26. DU(25) = 1083,47 = 108,35 puissance de 10 : 1
    … 249. … … puissance de 10 : 9
    … 250. … … puissance de 10 : 1

Tous les 25 ans x 10 = 250 ans, on peut y compris faire tourner la puissance de 10, sans besoin de stocker donc des nombres en expansion nulle part.

Sur le taux : il faut calculer la précision du taux cible en fonction du nombre de décimales efficaces.

Ainsi pour c = 10% / an, le taux journalier correspondant est : c = (1 + 10%) ^ (1/365,25) - 1 = 0,0260979 % / jour

Mais étant donné qu’on aura 5 chiffres pour le DU, calculons à au plus 6 chiffres pour vérifier la précision :

  • 999,99 x (1+0,0260979 %) = 1000,25
  • 999,99 x (1+0,026098 %) = 1000,25
  • 999,99 x (1+0,0261 %) = 1000,25
  • 999,99 x (1+0,026 %) = 1000,24999 = 1000,25
  • 999,99 x (1+0,03 %) = 1000,29 la différence devient sensible au centime près.

La précision du taux à 0,026% / jour est donc suffisante. Cela donne la même exactitude que de prendre plus de décimales pour le taux trop précis de 0,0260979% qu’il est donc inutile d’utiliser.

La simple remarque que 0,026% = 0,00026 comporte 5 décimales après la virgule et donc impacte les 5 chiffres du DU à la dernière décimale eût suffit à réaliser le même constat.

4 Likes

Je n’ai pas inscrit la “longueur” du DU dans les paramètres de la monnaie, mais directement dans le protocole en tant que valeur fixe.

Du coup, ce ne sera pas trop dur à réaliser.

2 Likes

Optimisation pédagogique 0,0274 % / jour

Etant donné que M/N = 1/c DU et que l’année fait 365,25 jours, on peut améliorer le c journalier pour qu’apparaisse 1/c = 10 ans = 3652,5 jours :

c = 1/(365,25 jours) = 0,0274 % / jour

1/(0,0274%/jour) = 3650 jours colle bien. C’est inutile d’un point de vue technique d’être aussi précis, mais utile en terme pédagogique pour expliquer le choix de cette valeur précise. en retrouvant le nombre de jours sur 10 ans avec 1/c.

Ce qui correspond à 10,5% / an = (1+0,0274%)^365,25 - 1, au lieu de 10% / an, ce qui reste très proche là aussi.

Si on en s’en tient aux 5 décimales utiles (étant donné qu’on ne garde que 5 nombres utiles pour le DU, cf plus haut), alors c = 0,027% / jour est le plus précis :

  • c = 0,026%/jour : 1/c = 3846 jours écart avec 3652,5 jours de 5,35%
  • c = 0,027%/jour : 1/c = 3703 jours écart avec 3652,5 jours de 1,38%
  • c = 0,028%/jour : 1/c = 3571 jours écart avec 3652,5 jours de 9,78%

Il y a un soucis avec le nombre de chiffres initial pour un DU s’il est trop petit. Cette problématique diffère de ce qui précède dans le sens où nous avons fait une estimation pour “c” en fonction du nombre Maximal du DU (999,99) concernant le roulement des bases, et pas considéré le nombre Minimal où “c” doit pouvoir aussi être efficace.

En effet avec DU = 10,00 (4 chiffres) et la formulation DU(t+1) = DU(t) + c²M/N, alors pour que le DU(t+1) augmente nous avons la condition nécessaire : c²M/N > 0,01

Or cela implique que M/N > 0,01/c², avec, nous le savons déjà un max par construction de M/N = 1/c DU. Il faut donc comme condition minimale :

1/c DU > 0,01/c² et donc DU > 0,01/c soit DU > 38,46 sans quoi on est certain de ne pas atteindre une augmentation de 1 centime ! Ce qui fait que le DU ne bougera pas… (ce que l’on peut outrepasser par une troncature au centime supérieur, mais qui ne respectera alors pas une croissance correcte, car augmenter de 0,01 un DU de 10,00, fait une augmentation sur un 1 an de (1+0,01)^365,25 - 1 = 3687 % / an ! (x37 par an environ, même si ça ne sera pas le cas puisque la formule reprendra le pas avant qu’on arrive à ce taux faramineux, il y aura tout de même une période où le DU croîtra trop vite… et cela de manière cyclique avec le roulement des chifres du DU tous les 23 ans).

Mais plus encore, si on veut que la formulation fonctionne au plus tôt dans la monnaie, disons pour M/N = 1 DU, alors il faut comme condition :

c²M/N > 0,01 <=> c² * 1 DU > 0,01 <=> DU > 0,01/c², donc avec c = 0,026% / jour on obtient que DU > 147929,00

Soit 8 chiffres pour le DU.

Pour être sûr ensuite qu’après un roulement qui reviendrait pour DU > 999,99999 à un DU qui revient vers 100,00000, alors tout simplement il faut compter une décimale de plus (x10).

Soit donc in fine un DU = 100,000000, soit 3 chiffres avant la virgule et 6 chiffres après la virgule, soit 9 chiffres efficaces en tout.

En effet avec M/N = 1 DU comprenant 9 chiffres efficaces, alors :

c²*M/N = c² * 1 DU > c² * 100,000000 = 0,000006

On voit bien directement ici que seul le dernier chiffre efficace est touché, on est bien sur un minimum de chiffres requis. Avec 8 chiffres efficaces il faudrait tronquer à la décimale supérieure pour que l’augmentation ait lieu.

9 est bien un minimum de chiffres à considérer pour le DU pour c = 0,026% / jour.

La règle générale étant que le nombre de chiffres efficaces minimum requis pour le DU doit donc être de l’ordre de chiffres avant la virgule de 10/c² = 147 928 994,083 soit 9 chiffres.

Conclusion : le nombre de chiffres efficace minimum (commençant par 1 suivi de zéros) à considérer pour le DU est égal au nombre de chiffres avant la virgule de 10/c². Pour c = 0,026% cela implique un nombre de chiffres égal au nombre de chiffres de trunc[10/(0,026%)²] = trunc(147 928 994,083) soit 9 chiffres, que l’on peut noter : 100,000000 et n’utiliser en affichage que 100,00 reste possible avec 4 chiffres cachés mais très utiles.

4 Likes

MAJ : pour éviter les confusions entre « nombre de chiffres » et « valeur numérique du DU » ou « affichage du DU » je mets les chiffres techniques du DU (interne Duniter), sans virgules, pour éviter la confusion entre le nombre interne et le nombre affiché qui placera une virgule là où ce sera le plus efficace.

Une autre approche serait de calculer le c efficace correspondant à 3 chiffres pour 1 DU = 100 minimal par exemple (pas de virgule, donc on cherche une modification à l’unité = 1 et pas au centime).

Dans ce cas il faut c² > 1/DU soit c > Racine(1/100) = 10%, dans ce cas le DU devrait être annuel et pas journalier…

Pour 6 chiffres, 1 DU = 100 000 => c > Racine(1/100 000) = 0,316% ce qui correspond à une fréquence f du DU de (1+0,316%)^(365,25/f) = 1+10% => f = 365,25 * ln(1+c)/ln(1+10%) = 12,10 jours

DU efficace.ods (10,8 Ko)

On retrouve bien le fait que c = 0,026% correspond à une fréquence entre 0,38 et 1,21 jours pour un nombre de chiffres minimal efficace entre 8 et 9.

3 Likes

Résumé des formules :

  • Nombre de chiffres efficaces du DU = nombre de chiffres de trunc(10/c²)
  • c efficace > √(1/DU) (avec le DU = 10…0 en nombre entier et nombre de chiffres retenu pour le DU)
  • fréquence en jours du “c” efficace (pour un rythme = 10% / an) : f = 365,25 * ln(1+c)/ln(1+10%)
1 Like

Je me faisait justement la réflexion ce WE, qu’avec un DU(0) = 1000 on ne verrait pas de variation d’un jours a l’autre, et qu’il faudrait donc plus de chiffres !! Et puis je me suis dit, non c’est trop gros ils ont du y penser…

EDIT : heureusement nous n’avons pas encore écris le bloc#0. Il est donc encore possible de modifier la valeur du paramètre ud0 pour 100000000 (afin de garder un DU journalier).

S’il n’y avait que ça tout serait ok. Le DU peut très bien rester stable un temps, par palliers, et n’augmenter qu’au bout de 6 mois par exemple. Mais là il n’augmenterait jamais parce que le DU(0) est trop petit, et même la monnaie pleinement établie avec M/N = 1/c DU ne permettrait pas de trouver une augmentation au DU qui n’a pas assez de chiffres pour être sensible à un “c²” très petit.

Par exemple en prenant 8 chiffres seulement au lieu de 9, dès que M/N = 10 DU, alors DUĞ fait augmenter le DU, car 10 DU aura les 9 chiffres suffisants pour être sensible à sa formule.

A noter qu’on peut garder un DU jour à 4 chiffres (qui ont le grand intérêt d’être à la fois efficaces économiquement et simples à gérer fonctionnellement pour l’utilisateur tout autant que pour les logiciels clients), à condition d’avoir une formulation pour le DU du genre :

DU fixe pendant 119,31 jours, puis le 119,31ème jour DU(t+1) = DU(t) + (c²*M/N) / (119,31), avec c = 3,17% / 119,31 jour

Ou pour 120 jours (1+c)^(365,25/120) = 1+10% => c = (1+10%)^(120/365,25) - 1 = 3,18% / 120 jours

Vérifions pour le DU minimal à 4 chiffres = 1000, et M/N = 1 DU => (3,18%)² * 1000 = 1001,01 le 4ème chiffre est bien impacté à minima pour le DU minimal à 4 chiffres, c’est une bonne fréquence.

On peut donc garder un DU jour, soit en se traînant 5 chiffres cachés et c = 0,026% / jour, soit en adoptant cette formulation un peu plus compliquée (mais pas tant que ça), mais qui n’a besoin que de 4 chiffres mis à jour tous les 120 jours avec c = 3,18% / 120 jours.

En terme de stockage elle est préférable, mais en terme de calcul elle demande une adapatation de la fréquence de calcul du DU.

A noter que dans ce cas le nombre de DU jours dans la monnaie sera de M/N = 120 * 1/(3,18%) = 3773,6 DU jours (toujours forcément proche de 1/(10%/an) = 10 ans = 10 * 365,25 jours)

Pour garder un DU jour à 5 chiffres, donc calculé tous les 38,13 jours, disons 40 jours, alors en suivant le même raisonnement on obtient, un DU fixe sur 40 jours, modifié au bout de 40 jours avec :

  • c = (1+10%)^(40/365,25) - 1 = 1,05% / 40 jours
  • Nombre de DU jours dans la monnaie M/N = 40 * 1/(1,05%) = 3809,5 DU jours

Vérification du calcul d’impact sur 5 chiffres avec M/N = 1 DU = 10 000 :

c²M/N*(1,05%)² * 10 000 = 10 001,1

L’impact au 5ème chiffre est bien assuré à ce taux et à cette fréquence pour le DU minimal à 5 chiffres. Dans ce cas par exemple le DU pourra donc tourner entre 100,00 et 999,99 puis passer en base supérieure pour revenir à 100,00 (tous les 23 ans environ).

C’est à ce problème que je faisais référence ici.

Oui c’est surtout cela l’argument. Si ce n’était qu’initialement, ç’aurait pu être acceptable.

Je répondrais plus en profondeur plus tard, je ne suis pas en conditions pour travailler correctement la question pour le moment.

Alors attention à ça, parce que le tableur prend en compte tous les chiffres sans limitation (autre que celle du tableur lui-même). Là le problème fait bien référence au fait que la limitation souhaitée du nombre de chiffres géré effectivement en nombre entier, limité à une plage de chiffres, implique de choisir le bon “c” à la bonne fréquence, tout arrondi à 0,01 ou à 0,00 alors que le calcul donne par exemple une modification à 0,00001, ferait exploser ou effondrer la croissance du DU pendant un temps important, et ça peut aller très vite.

Il faut donc comprendre ce soucis qui est de gérer en nombre de chiffres fini, ça n’est pas gérable correctement avec un tableur, sauf à faire très attention à ce qu’on fait (comparer justement un calcul décimal à beaucoup de décimales avec un nombre entier pur, en les ramenant à la même échelle).

J’avais bien compris cela, d’où les colonnes “Théorique”, “Floor”, “Ceil”. Je n’ai pas encore été au bout de la réflexion par contre, donc il peut y avoir des erreurs dans le tableur.

Oui j’ai vérifié et c’est bien ça, on voit bien que dans certains cas le DU ne bouge pas, dans d’autres il croît notablement plus vite que sa valeur théorique. Ce qui est dit dans ce fil corrige ce biais.

Pour s’en convaincre numériquement il faut comparer par exemple la croissance d’un DU jour à 4 chiffres avec la formulation donnée ici et la croissance d’un DU possédant 2 chiffres avant la virgule et 7 chiffres après la virgule avec le c jour = 0,026% / jour, les deux doivent parfaitement bien coller.

Pour comparer les deux évolutions e1 et e2, simplement faire le comparatif graphique e2/e1 qui doit rester bien calé autour de 1 (pour l’évolution de M/N mais pour le DU ça va différer très sensiblement, car il faudrait comparer non pas le DU à l’instant “t”, mais la somme des DU sur 120 jours).

Bref, en terme de continuité je penche toutefois pour la solution à 9 chiffres, qui évitera tout pallier, et en pratique il sera très certainement utile que les transaction ramassent tous les chiffres après les centimes de manière automatique, afin que ça ne traîne pas dans les coins… et ainsi on restera de manière transparente à 4 chiffres.

2 Likes

[quote=“Galuel, post:14, topic:1498”]
Pour comparer les deux évolutions e1 et e2, simplement faire le comparatif graphique e2/e1 qui doit rester bien calé autour de 1[/quote]

Rectificatif : seulement sur une petite période, car deux exponentielle même proches mais pas exactement égales vont diverger dans tous les cas… Suffit d’être patient :slight_smile:

J’ai fait des rectificatifs dans les posts précédents, en fait il faut diviser par 40 ou 120 après le calcul par c²M/N, car ce calcul donne le DU pour 40 jours ou 120 jours. Il faut en effet calculer exactement comme suit :

DU(t+1) = DU(t) + (c²*M/N) / p

Où p est la période de calcul du DU (p=1 pour 1 jour, p = 40 pour 40 jours, avec c = 1,045% / 40 jours). Ce qui est normal si on y réfléchit correctement puisqu’on veut produire un DU journalier, mais calculé tous les p jours.

Voici le tableau en monnaie pleine avec 9 chiffres :

DU_journalier_formule.ods (526,6 Ko)

Puis en monnaie montante toujours avec 9 chiffres :

DU_journalier_formule.ods (524,7 Ko)

Ils sont tombent juste comme on peut le vérifier en relatif (tout à droite).

En changeant le DU à 4 chiffres, en montée, la formulation tronquée à 4 chiffres avec fréquence allongée colle mieux au 100% décimal que les tronquées simples qui divergent nettement :

En monnaie pleine (M = 1/c DU * N) c’est encore plus flagrant, ça part carrément en vrille (normal, c’est attendu) :

DU_journalier_formule.ods (521,8 Ko)

Généralisons le problème, soit un DU à h chiffres, un c = 10% / an (c = 0,026% / jour) on cherche cp correspondant à une période « p » de calcul du DU en p jours, qui impacte à minima l’unité du DU, afin que le calcul ne soit pas faussé et colle à l’exponentielle théorique de manière suffisamment proche.

  • cp = (1+10%)^(p/365,25)-1

Sachant que les p premiers DU sont les mêmes, le premier calcul de la monnaie se fera sur un M/N de l’ordre de M/N = pDU, au bout de p jours, résultat qui sera ensuite étalé sur p jours (le DU calculé tous les « p » jours est créé en plusieurs fois sur p jours), donc qu’on devra diviser par p pour créer un DU journalier.

On veut donc que le calcul impacte au moins l’unité du DU, soit :

  • cp² M/N / p = cp² * pDU / p ≥ 1
  • Soit cp² ≥ 1/DU
  • Ou encore p ≥ 365,25 * ln[√(1/DU) + 1]/ln(1+10%)

Pour voir les solutions j’ai amélioré le tableur pour y inclure M0, DU0, p, cp en variables, on peut donc simuler un DU0 du nombre de chiffres souhaité, M0 minimal (=pDUN) ou plein ( M plein = 1/cjour*DU0 * N), et essayer plusieurs valeurs pour « p » pour voir à quel moment le DU est impacté au moins à l’unité.

On verra rapidement en graphe relatif que les solutions grossières qui consistent à tronquer le résultat à l’unité au lieu de trouver la bonne période de calcul du DU font nettement diverger la monnaie obtenue de sa valeur normale.

Il sera amusant de voir, quand on choisit p = 365,25 jours = 1 an, comment la monnaie obtenue se comporte par rapport à la monnaie quasi continue calculée en jours avec autant de décimales que voulu.

On s’apercevra que pour un DU jour à 4 chiffres p est efficace (en monnaie pleine uniquement) dès p = 4 jours, avec cp = 0,1044% / 4 jours, mais en monnaie montante, ça ne fonctionne pas (puisque M/N est trop petit pour que cp² M/N / p soit supérieur à l’unité), et il faut bien p = 120 jours pour que cela fonctionne correctement.

DU_journalier_formule.ods (412,9 Ko)

Étant donné l’efficacité économique des 4 chiffres pour le DU, je souhaite conserver cette valeur. Mais par ailleurs en termes techniques, je ne souhaite pas gérer plus de 4 chiffres non plus.

Soit cela oui.

Je crois que je préfère cette solution si le “caché” pouvait être un peu mieux qu’un simple masquage dans l’affichage, qui ferait quand même stocker techniquement 9 chiffres pour le DU. Je pense notamment qu’on peut mémoriser les valeurs théoriques de DU et M sur 9 chiffres, appelons les DUh et Mh (h pour hypothétique), et on aurait alors les formulations suivantes :

DUh(t+1) = DUh(t) + c² Mh(t)/N

Et :

DU(t+1) = PLANCHER(DUh(t+1))

Avec :

DUh(0) = DU(0) * 10⁵

Et donc on fonctionnerait bien sur 4 chiffres pour le DU, mais la formule prendrait en compte non pas le DU ni le M effectif précédent, mais reposerait plutôt sur sa valeur théorique sur 9 chiffres.

Je n’ai pas encore regardé les valeurs sur un tableur, mais j’évoque cette solution car elle me semble assez simple à réaliser techniquement.

1 Like

Non ça n’ira pas, parce que les nombres ne seront alors pas dans la monnaie, ce n’est pas qu’une question d’affichage, car il y a le cumul des DU à 9 chiffres, qui seraient une monnaie, alors que si on ne prend que les parties entières ces DU, on aura pas la bonne exponentielle, ça revient à tronquer.

Il n’y a pas de demi-mesure possible :

  • Soit on gère un DU à 9 chiffres effectivement, et la monnaie sommera tous ces DU.
  • Soit on gère un DU à 4 chiffres avec la formule qui s’applique tous les 120 jours, les DU jours étant stables entre.
  • Soit on gère la période de DU carrément sur 120 jours (mais on perd la continuité).
  • Soit on passe à 5 chiffres (40 jours), 6, 7… etc…

A noter que ça ne change absolument rien à la formulation DU(t+1) = DU(t) + c²M/N ni au calcul de la croissance journalière, il suffit juste de noter :

c = 3,18% / 120 jours = 10 % an = 0,026% / jour

La période choisie définit juste le moment du calcul du terme c²M/N qui contient cette période dans c². Le DU reste donc avec une formule journalière, qui est juste adaptée à cause du nombre de chiffres souhaité pour définir la longueur numérique fixe (nombre de chiffres) du DU.