Ga naar inhoud
  • 0

help: Is random wel random?


andre

Vraag

Ik heb een test bestand gemaakt om random te testen.

Werkt leuk, maar merk dat random geen random is.

 

Bestand toegevoegd die met behulp van een script 10 'random' nummers maakt. Je zou verwachten dat het telkens 10 verschillende unieke nummers worden. Maar plaatje laat zien dat dat niet zo is.

 

Wil je het zeker weten, dan even alle records wissen en Filemaker afsluiten.

Dan weer opnieuw script starten en je krijgt dezelfde nummers.

 

Nog een leuk iets... Maak je het venster groter of kleiner dan veranderen de nummers.. 8O

 

Is er iets wat ik fout doe?

Is het een bug?

Kan het anders?

 

Mijn systeem is een apple met leopard 10.5.x

FileMaker 9.0.3

 

Andre

5a758dc7cb636_Picture2.png.f41c199553a07d9d740306f4b55134f2.png

random test.fp7

Link naar reactie

19 antwoorden op deze vraag

Aanbevolen berichten

  • 0
Dat komt omdat je een calculation field gebruikt.

Elke keer wanneer je in het veld klikt, wordt het veld opnieuw berekend.

 

Met een Set Field werkt het beter...

 

Mark,

 

Lost bij mij niets op.... zelfde probleem.

Heb er een tekst veld van gemaakt. Zonder calculatie.

Het script maakt een random nummer in het veld.

 

Ga Gido_ zijn oplossing proberen. Ziet er leuk uit... kijken of ik het kan.

Zie me zelf als een beginnende Filmaker (gebruiker) na jaren niets meer gedaan te hebben

random test setfield.fp7

Link naar reactie
  • 0

Wil je het zeker weten, dan even alle records wissen en Filemaker afsluiten.

Dan weer opnieuw script starten en je krijgt dezelfde nummers.

ik kan dat gedrag niet reproduceren en het lijkt me ook niet logisch.

 

Je zou verwachten dat het telkens 10 verschillende unieke nummers worden. Maar plaatje laat zien dat dat niet zo is.

 

random is niet hetzelfde als uniek...

Link naar reactie
  • 0

Je hebt het je wel heel moeilijk gemaakt met die complexe formule. En als ik alle records verwijder, sluit, opnieuw open en je script weer laat lopen, dan krijg ik weer andere waarden.

Tussen haakjes: je loop-script doet het ook niet zoals je het had bedoeld. Als je het herhaalt, krijg je telkens één record bij.

Hier staan een aantal random voorbeelden.

Link naar reactie
  • 0
Hier staan een aantal random voorbeelden.

Als FMKB zelf blijkt te beweren dat 0 en 1 ook mogelijke uitkomsten zijn, is je uitleg "een getal tussen 0 en 1" dan wel juist? Het is in elk geval nog voor misinterpretatie /onzekerheid vatbaar...

 

…and the FileMaker Knowledge Base says:

 

The “Random” function returns “a random number between zero and one” including “zero and one”.

Dit uit mijn eerste link. Echt weten doe ik het zelf niet :wink:

Link naar reactie
  • 0
Als FMKB zelf blijkt te beweren dat 0 en 1 ook mogelijke uitkomsten zijn, is je uitleg "een getal tussen 0 en 1" dan wel juist? Het is in elk geval nog voor misinterpretatie /onzekerheid vatbaar...

Je hebt gelijk. Die fout was al eerder gesignaleerd (door Theo) en ik was in de overtuiging dat die al gecorrigeerd was. Gebeurt meteen! Thanks.

Link naar reactie
  • 0

Snap niet goed wat er gebeurt, maar heb my hier ook even aan gewaagd.

Volgende custom functie is gebaseerd op de TimeStamp, en zou ook random nummers moeten genereren.

Niet dat ik hier beweer de wijsheid in pacht te hebben, want de random() functie van FileMaker zou echt random genoeg moeten zijn.

Ik lees ook niet dat iemand het probleem van André kan reproduceren, dus ik denk echt dat hij ergens iets fout doet.

 

Met of zonder die timestamp, hier in elk geval een custom functie die het allemaal wat compacter maakt:

 

( Clip Manager clipje )

 


Let (<br />[<br />myDivisor = Length ( theFilter ) ;<br />myRandom = Mod ( Get ( CurrentTimeStamp ) * Random  ; myDivisor )<br />] ;<br />If ( theStringLength > 0 ; Middle ( theFilter ; myRandom ; 1 ) & CF_Random ( theFilter ; theStringLength - 1 ) )<br />)

 

Je doet dus

 

CF_Random ( "0123456789abcdef" ; 10 )

om je random hex waarde te krijgen.

 

Is dit nutteloos voor jullie zaak, het was in elke geval leuk om te maken... :?

random_test_2.fp7

Link naar reactie
  • 0

Peter,

 

Gaat werken :) toppie.

In de twee vensters kun je zien dat de oplossing van jou werkt.

  • Ik wis alle records en quit FM.
    Daarna open ik weer het bestand en maak 10 records.
    Maak een afbeelding van de records.
    Dan wis ik weer alle records en sluit FileMaker.
    Daarna open ik weer het bestand en maak 10 records.

Nu is de eerste rij records gelijk aan wat ik eerder had. Jou rij is uniek.

 

Maar nu maak je me gek.. sorry.. ik kom nog uit de FM 6/7 tijdperk (begonnen ooit met FM3 of 2 misschien wel 1)

mijn kennis kun je wel vergelijken met het stenen tijdperk. ;)

 

Nu op FM9 pak ik het weer op, maar loop nu wel erg veel achter.

Waar maak je de Custom functie?

 

Natuurlijk zal ik vragen om op cursus te gaan ;) want krijg er weer zin in.

 

Andre

5a758dc7d2248_Picture7.png.2aafc147fed9c4342cd169dccfc31525.png

5a758dc7d37d6_Picture6.png.fd1bea4af7a44b863bb078fd74bdf0f5.png

Link naar reactie
  • 0

ik snap nog altijd niet waarom het niet werkte, maar met die extra timestamp erbij is dat probleem blijkbaar ook bij jou doorbroken.

 

Als je de komende maanden aan een groot project moet werken met FileMaker, dan MOET je echt de FileMaker Advanced versie hebben.

 

Als je toepassingen schrijft in een gewone FileMaker, ben je eigenlijk zo blind als een mol, en duurt het ook veel langer om iets voor mekaar te krijgen. Je hebt een script debugger en een data viewer waarmee je alle waarden kan checken, ook tijdens het runnen van een script.

Voorts is het mogelijk om Custom Functions te maken, zoals hierboven, dingen die je met een gewone FileMaker alleen kan uitvoeren, niet maken.

Er zijn nog een aantal andere interessante dingen die de Advanced versie kan, zo kan je ook nog scripts, script stappen, tabellen en velden kopieren en plakken.

 

Met de tijd die je bespaart met FileMaker Pro Advanced , recupereer je het gespendeerde extra geld onmiddellijk.

Link naar reactie
  • 0

Dag Peter,

 

je bedoelde waarschijnlijk dit:

 

Let ( </p><p>[ </p><p>myDivisor = Length ( theFilter ) ; </p><p>myRandom = Mod ( Get ( CurrentTimeStamp ) * Random ; myDivisor ) +1</p><p>] ; </p><p>If ( theStringLength > 0 ; Middle ( theFilter ; myRandom ; 1 ) & CF_Random ( theFilter ; theStringLength - 1 ) ) </p><p>)

 

(Ik heb in de myRandom lijn +1 toegevoegd anders krijg je nooit de laatste letter van je filter)

Link naar reactie
  • 0

L.S.

 

Ik heb lekker zitten stoeien met random, maar het blijft dus een random in een gerangschikte volgorde.

 

Ik heb het geprobeerd met verschillende fm versies, maar blijft het zelfde gedrag vertonen.

Ik zal het ook nog eens proberen op een andere mac (misschien wel op een wintel).

 

Vooralsnog gebruik ik de oplossing van Peter. Dit werkt perfect.

 

Maar dat random zal ik nog niet los kunnen laten ;)

Link naar reactie

Doe mee aan dit gesprek

Je kunt dit nu plaatsen en later registreren. Indien je reeds een account hebt, log dan nu in om het bericht te plaatsen met je account.

Gast
Beantwoord deze vraag...

×   Geplakt als verrijkte tekst.   Plak in plaats daarvan als platte tekst

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...