விரைவான, நியாயமான முறையில் ஒரு சீரற்ற எண் வேண்டுமா? இந்த இலவச ஆன்லைன் சீரற்ற எண் உருவாக்கி நீங்கள் தேர்ந்தெடுக்கும் எந்த வரம்பிலும் — 1 முதல் 10 வரையிலான எளிய வரம்பு முதல் பில்லியன்களைத் தாண்டும் வரம்பு வரை — ஒரு எண்ணை, அல்லது எண்களின் முழு பட்டியலையே உருவாக்குகிறது. 'குறைந்தபட்சம்' மற்றும் 'அதிகபட்சம்' இல் தொடக்க மற்றும் இறுதி மதிப்புகளை உள்ளிடுங்கள், 'தேர்வுகளின் எண்ணிக்கை' மூலம் உங்களுக்கு எத்தனை எண்கள் தேவை என்பதைத் தேர்ந்தெடுத்து, 'உருவாக்கு' என்பதைக் கிளிக் செய்யுங்கள். இரு எல்லைகளும் முடிவில் சேர்க்கப்படும், எனவே 1 முதல் 10 வரையிலான வரம்பில் 1 மற்றும் 10 இரண்டும் வரலாம்.
ஒவ்வொரு முடிவும் உங்கள் உலாவியிலேயே Web Crypto API (crypto.getRandomValues) மூலம் நேரடியாக உருவாக்கப்படுகிறது — இது உங்கள் உலாவியின் அடிப்படை கணினி சீரற்றத்தன்மையிலிருந்து கிரிப்டோகிராஃபிக் முறையில் வலுவான சீரற்ற மதிப்புகளை அளிக்கிறது. எதுவும் சர்வருக்கு அனுப்பப்படுவதில்லை, எதுவும் பதிவு செய்யப்படுவதில்லை, மேலும் உங்கள் எண்களை நாங்கள் ஒருபோதும் பார்ப்பதில்லை. உருவாக்குதல் உடனடியாகவும் தனிப்பட்ட முறையிலும் நடக்கிறது, மேலும் பக்கம் ஏற்றப்பட்ட பின் மெதுவான இணைப்பிலும் தொடர்ந்து செயல்படும்.
இந்த விருப்பத்தேர்வுகள் மக்கள் உண்மையில் எண்களைத் தேர்ந்தெடுக்கும் நிலைமைகளுக்காக வடிவமைக்கப்பட்டவை. 'நகல்களைத் தவிர்க்கவும்' ஐ இயக்கினால் எந்த எண்ணும் இரண்டு முறை வராது — ராஃபிள்கள், லாட்டரி-பாணி டிராவ்கள், அல்லது மக்களை மீண்டும் வராமல் குழுக்களாகப் பிரிப்பதற்கு இது தேவைப்படும் அமைப்பு. 500 பங்கேற்பாளர்களில் 20 வெற்றியாளர்கள் வேண்டுமா? 'குறைந்தபட்சம்' இல் 1 ஐயும் 'அதிகபட்சம்' இல் 500 ஐயும் உள்ளிடுங்கள், 'நகல்களைத் தவிர்க்கவும்' ஐ இயக்குங்கள், 'தேர்வுகளின் எண்ணிக்கை' இல் 20 ஐ உள்ளிடுங்கள், பின் 'உருவாக்கு' என்பதைக் கிளிக் செய்யுங்கள். 'வரிசை' முடிவை ஏறுவரிசையிலோ இறங்குவரிசையிலோ அமைக்கும், மேலும் ஒரு பொத்தான் அனைத்து முடிவுகளையும் நகலெடுக்கும். 'வெளியீட்டு வடிவம்' ஐ 'புதிய வரி' இலிருந்து 'இடைவெளியால் பிரிக்கப்பட்டது' அல்லது 'கமாவால் பிரிக்கப்பட்டது' ஆக மாற்றினால் 'தொகுப்புகளின் எண்ணிக்கை' தெரியும்: ஒரே நேரத்தில் பல சுயாதீன டிராவ்கள் — 20 ராஃபிள் சுற்றுகளுக்கு 3 எண்களின் 20 தொகுப்புகள் — மேலும் 'தொகுப்புகளுக்கு இடையே நகல்களை அனுமதிக்கவும்' என்பது வெவ்வேறு தொகுப்புகளில் ஒரே எண் மீண்டும் வரலாமா என்பதை தீர்மானிக்கும்.
சீரற்றத்தன்மை உண்மையில் எப்படி உருவாக்கப்படுகிறது? உங்கள் உலாவி Math.random() போன்ற JavaScript PRNG க்குப் பதிலாக Web Crypto API மூலம் கிரிப்டோகிராஃபிக் முறையில் வலுவான சீரற்ற மதிப்புகளை அளிக்கிறது. நீங்கள் 'உருவாக்கு' என்பதைக் கிளிக் செய்யும்போது, பக்கம் crypto.getRandomValues மூலம் சீரற்ற மதிப்புகளைக் கோரி, நீங்கள் தேர்ந்தெடுத்த வரம்பிற்குள் எண்களை உருவாக்குகிறது. சீரற்றத்தன்மையின் அடிப்படை மூலம் உலாவி மற்றும் இயக்க முறைமையால் வழங்கப்படுகிறது, எனவே பக்கம் தனது சொந்த ஆரம்ப மதிப்பையோ (seed) சூடோ-சீரற்ற வரிசையையோ பராமரிக்க வேண்டிய தேவையில்லை.
ஒரு மூல மதிப்பை உங்கள் வரம்பிற்குள் மாற்றுவதுதான் உருவாக்கிகள் அமைதியாகத் தவறு செய்யும் இடம், அதற்கென தனி பத்தி தேவை. மதிப்பை வரம்பின் அளவால் மாடுலோ (modulo) செய்வது எளிதான வழியாகத் தோன்றும், ஆனால் அதுவே பக்கச்சார்புள்ளதும் கூட: வரம்பு 2^32 இல் சரியாகப் பிரியாத வரையில், மிகச் சிறிய எண்கள் மற்றவற்றை விட சற்று அதிகமாக வரும். இந்த குறைபாடு மாடுலோ பயாஸ் (modulo bias) என அழைக்கப்படுகிறது, இது கோட்பாட்டு ரீதியானது அல்ல, அளவிடக்கூடியது. இதற்குப் பதிலாக, இந்த உருவாக்கி வரம்பின் மிகப்பெரிய சரியான மடங்கிற்கு அப்பாற்பட்ட எந்த மதிப்பையும் நிராகரித்து மீண்டும் முயற்சிக்கிறது — இந்த நுட்பம் ரிஜெக்ஷன் சாம்ப்ளிங் (rejection sampling) என அழைக்கப்படுகிறது. இதற்கு சில கூடுதல் முயற்சிகள் தேவை, ஆனால் பதிலுக்கு ஒரு உறுதியான உத்தரவாதம் கிடைக்கிறது: 'குறைந்தபட்சம்' மற்றும் 'அதிகபட்சம்' இடையே உள்ள ஒவ்வொரு எண்ணுக்கும் சரியாக சம வாய்ப்பு உண்டு, கிட்டத்தட்ட சமமல்ல.
ஒரு எண்ணை உண்மையிலேயே சீரற்றதாக்குவது எது? முந்தைய முடிவுகள் அடுத்ததைப் பற்றி எதுவும் சொல்லாதபோது ஒரு எண் போதுமான அளவு சீரற்றதாக இருக்கும் — நடைமுறையில் இதற்கு மூன்று நிலைகள் உள்ளன. Math.random() போன்ற ஒரு சாதாரண சூடோ-சீரற்ற செயல்பாடு ஒரு நிர்ணயிக்கப்பட்ட (deterministic) அல்காரிதத்தை இயக்குகிறது: அதன் உள் நிலையை அறிந்தவர் யாரும் முழு வரிசையையும் மீண்டும் உருவாக்க முடியும் — இது ஸ்லைடுஷோ ஒன்றை மாற்ற ஏற்றது, ஆனால் முடிவை கணிக்கக் கூடாத எந்த வேலைக்கும் பொருந்தாது. இந்தக் கருவி பயன்படுத்தும் கிரிப்டோகிராஃபிக் முறையில் பாதுகாப்பான உருவாக்கி ஒரு அல்காரிதம்தான், ஆனால் கணினியின் பாதுகாப்பான சீரற்றத்தன்மையைப் பயன்படுத்தி கணிக்க முடியாத மதிப்புகளை உருவாக்க வடிவமைக்கப்பட்டுள்ளது, மேலும் அதன் வெளியீட்டைப் பார்த்தாலும் அடுத்து என்ன வரும் என்பது தெரியாது. வளிமண்டல சத்தம் அல்லது கதிரியக்க சிதைவு போன்ற மூலங்களிலிருந்து வரும் இயற்பியல் சீரற்றத்தன்மை இவை இரண்டையும் விட உயர்ந்தது, என்றாலும் ஒரு வரம்பிற்குள் எண் தேர்ந்தெடுப்பதில் நடைமுறை வேறுபாடு மறைந்துவிடும். Math.random() ஐ மேம்படுத்துவதற்குப் பதிலாக உலாவிகள் தனி crypto API ஐ வழங்குவதற்கு இதுவே காரணம்: இரண்டும் வெவ்வேறு பிரச்சினைகளைத் தீர்க்கின்றன, முடிவு யாருக்காவது முக்கியமானதாக இருக்கும்போது இவற்றில் ஒன்று மட்டுமே பாதுகாப்பானது.
ஒரு உண்மையான சீரற்ற வரிசை மனிதர்களுக்கு சீரற்றதாகத் தோன்ற வேண்டும் என்பதில்லை. 1 முதல் 10 வரை பத்து எண்களை எடுத்தால், ஒரு மறுபடியும், 7, 7, 8 போன்ற நெருங்கிய ஜோடி, அல்லது தொடர்ந்து உயர்ந்த எண்களின் குறுகிய தொடர் ஆகியவற்றைப் பார்ப்பீர்கள் — இவை அனைத்தும் சாதாரணமானவை. உண்மையான சீரற்றத்தன்மை கணிக்க முடியாதது, சமமாகப் பரவியிருப்பது அல்ல: ஒவ்வொரு தேர்வும் சுயாதீனமானது, முந்தைய எண்கள் பிந்தையவற்றை எந்த வகையிலும் பாதிக்காது, மேலும் எந்த எண்ணுக்கும் 'முறை' வருவதே இல்லை. இதற்கு மாறாக நினைப்பது சூதாட்டக்காரனின் தவறான எண்ணம் (gambler's fallacy) எனப்படும், மேலும் இதே உள்ளுணர்வுதான் மனிதர்களையே மோசமான சீரற்ற எண் உருவாக்கிகளாக ஆக்குகிறது — ஒரு சீரற்ற வரிசையை உருவாக்கச் சொன்னால், நாம் மறுபடியும் வராமல் தவிர்த்து, வாய்ப்பு செய்வதை விட மதிப்புகளை மிக சமமாகப் பரப்புகிறோம். சந்தேகத்திற்குரியதாக நேர்த்தியாகத் தோன்றும் வெளியீடு மனிதனின் கைரேகை; உண்மையான சீரற்றத்தன்மை கொத்துகளை உருவாக்கும்.
இந்த சீரற்ற எண் உருவாக்கியை ஏன் தேர்ந்தெடுக்க வேண்டும்?
- உலாவியில் மட்டும் உருவாக்கம்: எண்கள் உங்கள் சாதனத்திலேயே உருவாகும், வேறு எங்கும் அனுப்பப்படாது
- Web Crypto API சீரற்றத்தன்மை: கிரிப்டோகிராஃபிக் முறையில் பாதுகாப்பானது, Math.random() போல பலவீனமானதல்ல
- மாடுலோ பயாஸ் இல்லை: ரிஜெக்ஷன் சாம்ப்ளிங் வரம்பிலுள்ள ஒவ்வொரு எண்ணுக்கும் சம வாய்ப்பை உறுதி செய்யும்
- எந்த வரம்பும்: 1 முதல் 10 முதல் பில்லியன்களைத் தாண்டும் மதிப்புகள் வரை, இரு எல்லைகளும் சேர்ந்தே
- 'நகல்களைத் தவிர்க்கவும்' முறை: ராஃபிள்கள் மற்றும் குழுப் பிரிவுகளுக்கு நகல் இல்லாத பட்டியல்
- பல தொகுப்புகள்: ஒரே கிளிக்கில் பல சுயாதீன டிராவ்கள்
- வரிசைப்படுத்துதல் மற்றும் வெளியீட்டு வடிவங்கள்: ஏறுவரிசை அல்லது இறங்குவரிசை, புதிய வரி, இடைவெளி அல்லது கமா
- வரலாறு மற்றும் கோப்பில் சேமிக்கும் வசதி: நீங்கள் விளக்க வேண்டியிருக்கும் ஒரு டிராவின் பதிவை வைத்திருங்கள்
- வரம்பற்றது மற்றும் இலவசம்: பதிவு தேவையில்லை, பயன்பாட்டு வரம்பு இல்லை, எங்கள் சர்வர்களில் எதுவும் இல்லை
சீரற்ற எண்கள் பெரும்பாலான மக்கள் எதிர்பார்ப்பதை விட அதிக இடங்களில் பயன்படுகின்றன. ஆசிரியர்கள் யாரையும் சாதகமாக நடத்தாமல் மாணவர்களை அழைக்கிறார்கள். ஸ்ட்ரீமர்களும் மார்க்கெட்டிங் குழுக்களும் பார்வையாளர்களுக்கு முன் கிவ்அவே மற்றும் ராஃபிள் வெற்றியாளர்களைத் தேர்வு செய்கிறார்கள், அதனால் முடிவை பார்வையாளர்கள் நம்ப முடியும். வீரர்கள் தொலைந்த பகடையை மாற்றுகிறார்கள் அல்லது யார் முதலில் விளையாடுவது என்பதை முடிவு செய்கிறார்கள், மேலும் போட்டிகள் தொடக்க வரிசையை நிர்ணயிக்கின்றன. ஆராய்ச்சியாளர்கள் ஒரு சீரற்ற மாதிரியைத் தேர்ந்தெடுக்கிறார்கள், அதனால் அவர்களின் கண்டுபிடிப்புகள் தன்னார்வலர்களை மட்டும் தாண்டி பொருந்தும். டெவலப்பர்கள் சோதனை தரவை உருவாக்குகிறார்கள், சிமுலேஷன்களுக்கு ஆரம்ப மதிப்புகளைப் பயன்படுத்துகிறார்கள், மேலும் QA க்கு இடையில் அடையாளங்களைத் தேர்வு செய்கிறார்கள். இவை அனைத்திலும் பொதுவான அம்சம் என்னவென்றால், இது பின்னர் விளக்கக்கூடிய ஒரு சீரற்ற தேர்வு செயல்முறை: டிராவ் கிரிப்டோகிராஃபிக் சீரற்றத்தன்மையைப் பயன்படுத்தி முழுக்க உங்கள் சாதனத்திலேயே நடப்பதால், யாராவது கேள்வி எழுப்பினால் முடிவு எப்படி உருவானது என்பதை நீங்கள் காட்ட முடியும்.
இந்த உருவாக்கிக்கு தெரிந்திருக்க வேண்டிய சில நேர்மையான வரம்புகள் உள்ளன. 'நகல்களைத் தவிர்க்கவும்' முறை வரம்பில் உள்ளதை விட அதிக எண்களை உருவாக்க முடியாது: 1 முதல் 10 வரை 20 தனித்துவமான மதிப்புகள் இருக்கவே முடியாது. டிராவ்கள் சுயாதீனமானவை, முந்தைய முடிவுகள் பிந்தையவற்றை பாதிக்காது, எனவே பக்கத்தைப் புதுப்பிப்பது எந்த சுழற்சியையும் மீட்டமைக்காது — ஏனெனில் இங்கு சுழற்சி என்பதே இல்லை. மேலும் எண்கள் கிரிப்டோகிராஃபிக் முறையில் வலுவாக இருந்தாலும், இங்குள்ள டிராவ் ஒரு கணிப்பு அல்ல, ஒரு நியாயமான தேர்வு: அதிகாரப்பூர்வ லாட்டரி டிராவ்கள் அவற்றின் சொந்த இயற்பியல் அல்லது சான்றளிக்கப்பட்ட உபகரணங்களைப் பயன்படுத்துகின்றன, மேலும் உங்கள் உலாவியில் கணக்கிடப்பட்ட எதுவும் அவற்றுடன் எந்த தொடர்பும் கொண்டதல்ல. இந்த வரம்புகளுக்குள் உத்தரவாதம் மிகவும் உறுதியானது — ஒவ்வொரு டிராவிலும், உங்கள் வரம்பில் உள்ள ஒவ்வொரு எண்ணுக்கும் சரியாக சம வாய்ப்பு உண்டு.