Tämän päivän kauhuohjelmajaksossa... Python-dokumentaatiossa random.seed():ssä kerrotaan selvästi, että "Jos a on int, sitä käytetään suoraan." [1] Mutta jos siemennät 3 tai -3, saat itse asiassa täsmälleen saman satunnaisuuden, tuottaen samat virrat. (TIL). Nanochatissa käytin merkkiä (mitä luulin olevan) nerokkaana tapana saada erilaisia satunnaissarjoja juna-/testijakoihin. Siksi gnarly bugi, koska nyt train=test. Löysin CPython-koodin vastuussa cpython/Modules/_randommodule.c [2], jossa rivillä 321 näemme kommentissa: "Tämä algoritmi perustuu siihen, että luku on allekirjoittamaton. Joten: jos arg on PyLong, käytä sen itseisarvoa." n = PyNumber_Absolute(arg); joka nimenomaan kutsuu abs():n siemenessäsi positiiviseksi, jolloin merkkibitti hylätään. Mutta tämä kommentti on oikeasti väärä/harhaanjohtava myös. Konepellin alla Python kutsuu Mersenne Twisteriä MT19937 algoritmiksi, jolla yleisesti ottaen on 19937 (nollasta poikkeava) bittitila. Python ottaa int:si (tai muut objektit) ja "levittää" sen tiedon näiden bittien kesken. Periaatteessa merkkibittiä olisi voitu käyttää tilabittien täydentämiseen. Algoritmissa ei ole mitään, mikä "perustuisi siihen, että luku on allekirjoittamaton". Päätettiin olla sisällyttämättä kylttiosaa (mikä mielestäni oli virhe). Yksi triviaali esimerkki olisi kuvata n -> 2*abs(n) + int(n < 0). Lopuksi tämä johtaa meidät Pythonin satunnaissopimuksen sopimukseen, jota ei myöskään ole täysin selitettynä dokumentaatiossa. Mainittu sopimus on: sama siemen => sama sekvenssi. Mutta ei ole takeita siitä, että eri siemenet tuottavat erilaisia sekvenssejä. Periaatteessa Python ei lupaa esimerkiksi siemen(5) ja siemen(6) eri satunnaisvirtoja. (Vaikka tämä oletetaan monissa sovelluksissa melko yleisesti implisiittisesti.) Itse asiassa näemme, että siemen(5) ja siemen(-5) ovat identtisiä virtoja. Eikä niitä kannata käyttää erottamaan koulutus- ja testauskäyttäytymisiä koneoppimisessa. Yksi viimeaikaisimmista ohjelmointikauhu-footgun-aseista, joita olen viime aikoina kohdannut. Nähdään seuraavassa jaksossa. [1] [2]