Jump to content
  • 0

help: Is random wel random?


andre

Question

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 to comment

19 answers to this question

Recommended Posts

  • 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 to comment
  • 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 to comment
  • 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 to comment
  • 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 to comment
  • 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 to comment
  • 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 to comment
  • 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 to comment
  • 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 to comment
  • 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 to comment
  • 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 to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...