UNIX ja satunnaisluku

Matti.W

Miksi seuraava komentojono antaa joka kerta ajettaessa saman luvun?

#!/bin/sh
a=`date ' %N'`      #nanosekunnit
a=`expr $a \/ 1000`   #muutetaan ne mikrosekunneiksi
gawk 'BEGIN {srand($a);print rand();}'



Ei auta vaikka jättäisi kolmannen rivin pois. Komentojonolla yritin alustaa awk:n satunnaislukugeneraattorin komentotulkin päivyrin antamilla nanosekunneilla.

Sen sijaan seuraava komento antaa kyllä eri luvun mutta se alustaa satununnaislukugeneraattorin kellonajalla mutta vain kerran sekunnissa, saman sekunnin sisällä otetut luvut ovat samoja:

gawk 'BEGIN {srand();print rand();}'

Miten Linuxin saisi antamaan useita satunnaislukuja sekunnin sisällä?

5

879

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Catilina

      Todella satunnaisten lukujen tuottaminenhan on aika mahdotonta. Anna joku laskutoimitus, josta varmasti tiedät, että tulos on irrationaaliluku, ja ota siitä vaikka joka kolmas numero tms.
      Parempiakin ehdotuksia voi löytyä.

      • kellokin

        ...on hyvä satunnaislukujen siementäjä mutta silloin pitää käyttää millisekunteja ja mielellään niin että siinä on mukana vaikkapa käyttäjän vasteaika tai joku muu oikeasti satunnainen suure.

        Aloittajan otsikko on kovasti hämäävä niinkuin tämä olisi jotenkin Linuxiin liittyvä ongelma. Jos tietokone jotenkin osaisi itse laskemalla tuottaa satunnaislukuja niin saattaisi oikeidenkin laskutoimitusten tulokset vähän värähdellä.


    • Ossi

      Tuottaa nopeasti lähes kaikkeen kelpaavaa bittimösöä.

    • Ongelmassa on kyse vain shellin normaalista tekemästä komentorivin laajennuksesta. '':n sisällä olevaa tavaraa ei laajenneta. Sen sijaan "":n sisällä oleva laajennetaan. Esim.

      export A=1
      ja
      echo "A=$A"
      on eri asia kuin
      echo 'A=$A'

      Tässä tapauksessa homma menee näin:
      gawkille annetaan yksi argumentti, joka on kaikki noiden '':n sisällä oleva tavara. Tätä viimeistä riviä ei laajenneta, joten gawk saa tuon koodin sananmukaisesti (eli shellissä $a:aa ei laajenneta ennen kuin gawk ajetaan).

      gawkin syntaksissa muuttujiin viitataan muodossa $muuttuja. Muuttujaa a ei ole tuossa vielä määritelty, joten se on tyhjä, ja srand ei saa yhtään argumenttia. gawkissa srand taitaa käyttää juuri kellonaikaa, jos sille ei anneta mitään argumenttia.

      Ratkaisu on siis käyttää lainausmerkkejä gawkin argumentin ympärillä:

      gawk "BEGIN {srand($a);print rand();}"

      bashia käytettäessä kannattaa lukaista kappale quoting.

    • laitetta

      Mikäli satunnaisuuden tarve ei ole niin valtava niin /dev/random ja /dev/urandom antavat pseudorandomia. urandom nopeammin ja random paremmin. Tai Bashissa vaikka: expr $RANDOM % 10

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Persujen mukaan rasismi on huumoria

      Vaan kun koomikko kutsui Halla-ahoa fasistiksi, niin piti haastaa oikeuteen. Mihin se huumorinitaju yhtäkkiä hävisi? ⠀
      Maailman menoa
      255
      6563
    2. Rasismia kaikkialla näkevät ovat Suomen tyhmimpiä ihmisiä

      ja monillahan kuluu myös mielialalääkkeitä, eli päässä on ongelmia. Mutta he eivät tajua kuinka paljon ja ihan todellis
      Maailman menoa
      210
      6128
    3. Ei kahta sanaa etteikö Petteri Orpo hyväksy rasismia

      Koska jatkaa hallituksessa rasistisen perussuomalaisiksi itseään kutsuvan puolueen kanssa. Se on Petteri Orpon arvomaai
      Maailman menoa
      38
      5630
    4. Mitkäs nuorisoporukat ovat toisia nuoria ryöstelleet (selvää rassismia)

      No poliisi kertoo, että maahanmuuttajataustaisia ovat, ja isot porukat sillä yhden suomalaisen uhrin kimpussa on ollut j
      Maailman menoa
      144
      4937
    5. Pitkän linjan yritysjohtaja: Suomen tapahtumat eivät ole Aasian kärkiuutinen

      Viimeaikaista kohua on käytetty sisäpoliittisena lyömäaseena, Thomas Zilliacus sanoo. – Koska asiaa kuitenkin kommentoi
      Maailman menoa
      21
      3733
    6. Hallitus on kaadettava ja Orpon on erottava

      Mikään muu hallitus ei ole oman elämäni aikana tuhonnut näin paljon tämän maan taloutta ja työllisyyttä sekä suomen main
      Maailman menoa
      182
      3671
    7. Lasse Lehtonen vaatii persuja pyytämään anteeksi aasialaisilta

      Persut ova romahduttaneet Suomen maakuvan parissa päivässä negatiiviseksi rasismillaan ja se alkaa vaikuttamaan jo Suome
      Maailman menoa
      131
      3425
    8. HS 12/25 kysely: persut romahti, demarit raketoi

      Kyyti on kylmää persuleirissä, saattaa vetää siellä silmätkin viirulleen. Sen sijaan SDP:n puoluetoimistolla voidaan pok
      Maailman menoa
      33
      3123
    9. Rasismi rapauttaa Suomen mainetta ja hallituksen hiljaisuus pahentaa vahinkoa

      Finnairin viesti Japanista on pysäyttävä: suomalaisen politiikan rasismikohut heijastuvat suoraan matkustuspäätöksiin ja
      Maailman menoa
      316
      2718
    10. Töppö-persut ovat todella tyhmiä

      sen kertoo tämäkin avaus: "Persujen suosio vain laskee" Töppö-persu vaan unohtaa, että ennen tätä galluppia persujen kan
      Maailman menoa
      27
      2585
    Aihe