[p5.js 2.0+ Bug Report]: randomGaussian() leaks its spare value across p5 instances, breaking seeded determinism
Maintainer antworten meist innerhalb von 2 Tagen
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 38/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- javascript
- Bereich
- frontend
Rechercherichtung
Beginne in src/math/random.js und untersuche den bestehenden übersprungenen Unabhängigkeitstest für den Instanzmodus. Reproduziere die abwechselnden Aufrufe mit gesetztem Seed mit zwei p5-Instanzen und führe anschließend die relevanten Zufallszahlentests aus. Die Aufgabe ist abgeschlossen, wenn die Instanzen unabhängige deterministische Sequenzen erzeugen und der Regressionstest erfolgreich ist.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
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.
- Vorherrschende Sprache
- JavaScript
- Sterne
- 24.3k
- Forks
- 3.9k
- Ø Merge
- 3 T. 18 Std.
- Gemergte PRs (30 T.)
- 45
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus processing/p5.js
-
[p5.js 2.0+ Bug Report]: autoplay(false) leaves the autoplay attribute enabledEvtl. vergeben @BhumitSahani hat das heute übernommen. OffenArea:DOM p5.js 2.0+
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 78/100
processing/p5.js#9362 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 2 Tagen
-
p5.js 2.0+
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
processing/p5.js#9360 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Area:Typography Area:WebGL p5.js 2.0+
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100
processing/p5.js#9356 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
[p5.js 2.0+ Bug Report]: Incorrect isDone assignment in MediaElement.onended() exampleEvtl. vergeben @BhumitSahani hat das vor 6 Tagen übernommen. OffenArea:DOM p5.js 2.0+
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 86/100
processing/p5.js#9339 · 2 Kommentare · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 2 Tagen
-
[p5.js 2.0+ Bug Report]: Mismatched map() Reference ExampleEvtl. wieder frei @j-xsen hat das vor 7 Tagen übernommen, und es ist kein Pull Request offen. OffenArea:Math Documentation p5.js 2.0+
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 87/100
processing/p5.js#9329 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 2 Tagen
Alle Issues in processing/p5.js
Ähnliche Issues
-
needs-triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 66/100
microsoft/playwright#43875 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Run the dependency drift checkEvtl. vergeben @spaceninja hat das heute übernommen. Offen
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 82/100
cloudfour/stylelint-config-cloudfour#683 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Documentation Enhancement
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
JSPrismarine/JSPrismarine#2706 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
PostHog/posthog-js#5524 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
enhancement good first issue help wanted
Schwierigkeit 2/5 Ein halber Tag Anfängerfreundlichkeit 66/100
AlphaaCode/Popbook#10 ·