MSX Village forum

La Place des Développeurs Random en assembleur ?

granced Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 09/10/2009 à 09h18

Messages: 1500

Le 01/11/2012 à 08h53

Reprise du message précédent

Tu charges le contenu de l'adresse Rand8+1, pas l'adresse ! ;)

Quand il y a des parenthèses ou crochets, c'est le contenu de l'adresse, sans elles c'est la valeur proprement dite.


MSX un jour, MSX toujours ! :D
Site web    
Sector28 Membre non connecté

Villageois

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 12/05/2018 à 23h00

Messages: 552

Le 01/11/2012 à 09h02
tu ne sais pas lire l'instruction

on range l'accumulateur à cette adresse, c'est un code qui se modifie de lui-même

de plus il ne fonctionne pas en rom, c'est mauvais et complétement débile

voici une meilleure version :)

Code ASM :
 
 
;This is a very simple linear congruential generator. 
;The formula is x[i + 1] = (5 * x[i] + 1) mod 256. 
;Its only advantage is small size and simplicity. 
;Due to nature of such generators only a couple of higher bits should be considered random.
 
;Input: none
;Output: A = pseudo-random number, period 256
 
Rand8lda,(Seed); Seed is usually 0
ldb,a
adda,a
adda,a
adda,b
inca; another possibility is ADD A,7
ld(Seed),a
ret
 
 



Toute matrice carrée sur un corps K, dont le polynôme caractéristique est scindé, est semblable à une matrice de Jordan. Cette réduction est unique à l'ordre des blocs près. De plus, toute matrice carrée nilpotente sur un corps K est semblable à une matrice de Jordan dont chaque bloc est associé à la valeur 0. Évidement, cette réduction est encore unique à l'ordre des blocs près...
:)
   
bfg Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 05/08/2011 à 10h02

Messages: 58

Le 01/11/2012 à 10h06
Sector28 :
tu ne sais pas lire l'instruction



on range l'accumulateur à cette adresse, c'est un code qui se modifie de lui-même



de plus il ne fonctionne pas en rom, c'est mauvais et complétement débile



voici une meilleure version :)



Code ASM :
 
 
;This is a very simple linear congruential generator. 
;The formula is x[i + 1] = (5 * x[i] + 1) mod 256. 
;Its only advantage is small size and simplicity. 
;Due to nature of such generators only a couple of higher bits should be considered random.
 
;Input: none
;Output: A = pseudo-random number, period 256
 
Rand8    ld    a,(Seed)        ; Seed is usually 0
    ld    b,a
    add    a,a
    add    a,a
    add    a,b
    inc    a        ; another possibility is ADD A,7
    ld    (Seed),a
    ret
 
 




En fait je m'étais mal exprimé, mais tu confortes la chose qui me semblait bizarre :) Merci !
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2695

Le 02/11/2012 à 10h24
Pour le modulo entre 0 et 3, un simple AND entre le résultat du random et 0x3 fera l'affaire.

Code C :
BYTE mod_0_3 = mod_0_255 & 0x3;


Ça marche aussi pour 0-7, 0-15, 0-31, etc.

C'est le modulo du pauvre (mais très efficace). :D



Sector28 :
de plus il ne fonctionne pas en rom, c'est mauvais et complétement débile




Pas très sympathique de traiter de « mauvais et complétement débile » une solution qui n'a comme seul défaut de ne pas fonctionner en ROM. ^^ Pour faire fuir les gens de ce site, y a pas mieux... Edité par aoineko Le 02/11/2012 à 12h01


On est toujours ignorant avant de savoir.
Github    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2695

Le 19/12/2021 à 03h13
Hello,
Je voulais tester la qualité de différents algorithmes de génération de nombre (pseudo)aléatoire ; du coup, j'ai créé un petit programme qui affiche une heatmap (carte de chaleur) de la répartition de 32 milles tirages aléatoires.
Le principe est simple, je récupère un nombre aléatoire pour X et Y et je dessine à cette emplacement, en faisant évolué la couleur quand je touche plusieurs fois le même endroit.
Cela m'a permis d'écarter un certains nombre d'algorithme aux performances ou aux résultats trop mauvais.
Voila la liste de ceux que j'ai gardé pour ma libraire.
Le code source est disponible sur : https://github.com/aoineko-fr/CMSX/blob/master/cmsx/src/math.c

7-bits R register accumulation


Très bon rapport qualité/cout, mais ne génère que 7-bits (0-127)

7-bits R register accumulation (by ARTAG)


Version alternative proposé par ARTAG sur MRC.

8-bits Ion random (by Joe Wingbermuehle)


Très bon algorithme 8-bits

8-bits Memory peek from R


Les performances de cet algo ne sont pas bonnes, mais l'idée est intéressante : on va piocher un nombre aléatoire en lisant une valeur mémoire au hasard (ce qui fait malheureusement perdre de l'entropie).

16-bits Linear congruential (A:3 C;0x8721)


Un algo très simple. C'est une suite de la forme n+1 = (n * A) + C . En jouant sur les constantes A et C , on peut faire varier la distribution des tirages aléatoires. Avec 3 et 0x8721, j'ai trouvé des paramètres très peu couteux et qui marchent très bien.

16-bits Linear congruential (A:75 C:74)


Des paramètres recommandés par certaines publications. Répartitions très harmonieuses, mais avec des trous.

16-bits Linear congruential (A:129 C:0x4321)


Pas forcement les paramètres les plus optimaux, mais c'est beau. ^^

16-bit XOR Shift


Très bon rapport qualité/cout. D'autres version de cet algorithme existe aussi.

16-bit Linear Feedback Shift Register and LCG


Combinaison de 2 algo qui permet d'avoir un cycle de plus de 4 milliards de tirages !!


On est toujours ignorant avant de savoir.
Github    
Ricco59 Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 02/01/2021 à 11h22

Messages: 248

Le 19/12/2021 à 22h37
T'es un Grand malade Guillaume euhhhh un PASSIONNé ;) 3h13, tu dors jamais ??

C'est grace à des passionnés comme toi que les choses avancent

Merci ;)


Tous mes travaux sont centralisés sur mon piti blog : https://ricco59.blogspot.com/
E-mail    
Gfx Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 22/02/2021 à 22h22

Messages: 355

Le 14/01/2022 à 11h41
C'est beau en plus !
Tu pourrais presque générer des patterns cycliques pour faire des tiles.
Avec un bruit de Perlin ça serait chouette... je m'égare :D


Il faut cultiver notre jardin.
   
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie