[p5.js 2.0+ Bug Report]: randomGaussian() leaks its spare value across p5 instances, breaking seeded determinism
Les mainteneurs répondent en général sous 2 jours
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 38/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- javascript
- Domaine
- frontend
Piste de recherche
Commencez dans src/math/random.js et examinez le test d’indépendance existant et ignoré du mode instance. Reproduisez les appels entrelacés avec une seed à l’aide de deux instances p5, puis exécutez les tests pertinents de nombres aléatoires. La tâche est terminée lorsque les instances produisent des séquences déterministes indépendantes et que le test de régression réussit.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Most appropriate sub-area of p5.js?
Math
p5.js version
2.x main (4b096e2)
Actual vs expected behavior
The randomSeed() reference promises that a constant seed "makes these functions produce the same results each time a sketch is run", explicitly naming randomGaussian(). That breaks as soon as two p5 instances exist on a page.
randomGaussian() uses the Marsaglia polar method, which produces values in pairs. The flag that says "a spare value is cached" lives on the instance (this._gaussian_previous), but the spare value itself lives in module scope (let y2 = 0; in src/math/random.js). With two instances, B's spare overwrites A's, and A's next call returns B's value.
Executed repro (both instances seeded, one interleaved call on instance B):
A alone : -0.2050, -0.3410, 0.3986, -1.4309
A interleaved: -0.2050, -0.9404, 0.3986, -1.4309
Same seed, different sequence. The existing test suite even contains a skipped "instance mode / should be independent" block asserting exactly this independence. PR #1681 (2015) made _gaussian_previous per-instance but left y2 module-scoped, which is the remaining half of that fix.
Steps to reproduce
Outputs above are from executed runs against main, two instances sharing the prototype as in instance mode.
Note
I have a fix ready (store the spare as this._gaussian_y2) with a regression test, mutation-tested against main. Filing for approval first per the contributing guide; will open the PR once approved.
- Langage dominant
- JavaScript
- Étoiles
- 24.3k
- Forks
- 3.9k
- Merge moyen
- 3 j 22 h
- PR mergées (30 j)
- 46
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de processing/p5.js
-
[p5.js 2.0+ Bug Report]: Incorrect isDone assignment in MediaElement.onended() examplePeut-être pris @BhumitSahani l’a pris il y a 3 jours. OuverteArea:DOM p5.js 2.0+
Difficulté 1/5 Moins d'une heure Accessibilité débutants 86/100
processing/p5.js#9339 · 2 commentaires · 1 personne assignée ·
Les mainteneurs répondent en général sous 2 jours
-
[p5.js 2.0+ Bug Report]: Mismatched map() Reference ExamplePeut-être pris @j-xsen l’a pris il y a 3 jours. OuverteArea:Math Documentation p5.js 2.0+
Difficulté 1/5 Moins d'une heure Accessibilité débutants 87/100
processing/p5.js#9329 · 2 commentaires ·
Les mainteneurs répondent en général sous 2 jours
-
Area:Core p5.js 2.0+
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
processing/p5.js#9319 · 1 commentaire ·
Les mainteneurs répondent en général sous 2 jours
-
Area:WebGL p5.js 2.0+ p5.strands
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
processing/p5.js#9317 · 4 commentaires ·
Les mainteneurs répondent en général sous 2 jours
-
[p5.js 2.0+ Bug Report]: createRadio().disable(false) does not re-enable radio inputsPeut-être pris @aryanb1906 l’a pris il y a 4 jours. OuverteArea:DOM Good First Issue p5.js 2.0+
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
processing/p5.js#9316 · 5 commentaires · 1 réaction ·
Les mainteneurs répondent en général sous 2 jours
Toutes les issues de processing/p5.js
Issues similaires
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 92/100
danilogiles/enki-browser#113 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
Les mainteneurs répondent en général sous 1 jour
-
ux
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
evcc-io/evcc#35605 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
bug triage
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 95/100
weavefox/awesome-opc#29 ·
Les mainteneurs répondent en général sous 1 jour