मजबूत रैंडम संख्या जनरेशन

मैं किसी विशेष हार्डवेयर का उपयोग कर एक निष्पादक, उचित रूप से मजबूत आरएनजी की तलाश में हूं। यह गणितीय तरीकों का उपयोग कर सकता है (मेर्सन ट्विस्टर, आदि), यह मशीन से "एंट्रॉपी एकत्र" कर सकता है, जो भी हो। लिनक्स / आदि पर हमारे पास drand48() है जो 48 यादृच्छिक बिट उत्पन्न करता है। मुझे सी ++ या सी # के लिए एक समान फ़ंक्शन / क्लास चाहिए जो यादृच्छिकता के 32 बिट से अधिक उत्पन्न कर सकता है और कम ऑर्डर बिट्स उच्च-आदेश बिट्स के रूप में समान रूप से यादृच्छिक हैं।

इसे क्रिप्टोग्राफ़िक रूप से सुरक्षित नहीं होना चाहिए, लेकिन इसका उपयोग सी-भाषा rand() या .NET System.Random पर आधारित नहीं होना चाहिए।

किसी भी स्रोत कोड, स्रोत के लिए लिंक, आदि की सराहना की जाएगी! यह विफल होने के कारण, मुझे आरएनजी का किस प्रकार की तलाश करनी चाहिए?

0
जोड़ा संपादित
विचारों: 3
@ bames53 मैंने अभी एक दोबारा वोट पोस्ट किया है। प्रतीत होता है कि आपके पास पर्याप्त प्रतिनिधि भी है, इसलिए इसे करें। :-D
जोड़ा लेखक Chris Jester-Young, स्रोत
System.Random क्यों नहीं? मुझे पता है कि rand खराब है, System.Random गरीब भी है? यदि हां, तो यह दुखद है :(
जोड़ा लेखक Mooing Duck, स्रोत
इस सवाल को बंद करने का औचित्य बिल्कुल सही नहीं लगता है।
जोड़ा लेखक bames53, स्रोत
मुझे लगता है कि अब आप
बस Google कर सकते हैं
जोड़ा लेखक Sergio, स्रोत

9 उत्तर

इस विषय पर स्टैक ओवरफ्लो की लंबाई पर चर्चा की गई है, यह गुणा/अतिरिक्त/लुकअप की सापेक्ष लागत को छोड़कर काफी प्रोसेसर-स्वतंत्र और भाषा-स्वतंत्र है, जो कुछ कार्यान्वयन को अधिक आकर्षक बना देगा।

Atan2() फ़ंक्शन, या आयताकार-से-ध्रुवीय रूपांतरण, उचित आकार की लुकअप टेबल द्वारा पूरी तरह लागू नहीं किया जा सकता है; कॉर्डिक एक विकल्प है।

3
जोड़ा

Have a look at the CORDIC algorithms in section 31.2 of the fxtbook: http://www.jjj.de/fxt/

2
जोड़ा

आप एक पीआईसी पर कोडिंग कर रहे हैं, आपके कोण कितने बिट्स हैं? यदि आपके पास 8 बिट नंबर आ रहा है, तो एक लुकअप टेबल आसान हो सकती है, यदि आपके पास 16 बिट नंबर आ रहा है, तो यह एक अलग कहानी है।

आम तौर पर पीआईसी 8 या 10 बिट संख्या में जितना बड़ा होगा उतना बड़ा होगा, एक लुकअप टेबल शायद ठीक है। उच्च सटीकता संख्या प्राप्त करने में लोग अक्सर खो जाते हैं, आमतौर पर आपको एक की आवश्यकता नहीं होती है। मैंने किसी को 12 सेंटीमीटर सेंसर पढ़ा था, युगल का उपयोग करके और वास्तव में सटीक रूपांतरण प्राप्त कर रहा था। यह पूरी तरह से काम करता था जब उसने परीक्षण के लिए इनपुट के रूप में वोल्टेज स्रोत का उपयोग किया था, लेकिन आप इसकी त्रुटि के साथ एक वास्तविक सेंसर जोड़ते हैं और आपको लगता है कि सभी सटीकता समय की बर्बादी है।

ऐसे मामले हैं जहां मैं एक उच्च गुणवत्ता वाले पाप/कोस/तन फ़ंक्शन का उपयोग करने का सुझाव दूंगा, मैंने कभी भी एक पीआईसी पर सामना नहीं किया है। अगर आपको उच्च गुणवत्ता वाले साइन फ़ंक्शन की आवश्यकता है तो मुझे क्षमा करें, मैं सिर्फ जवाब दे रहा हूं कि 95% मामलों के लिए सही जवाब क्या होगा।

1
जोड़ा
एमोस से सहमत, मुझे आपका समाधान भी पसंद है, लेकिन गुणात्मक शो को सामान्य रूप से हार्डवेयर की उपस्थिति के आधार पर चुना जाना चाहिए, सभी पीआईसी में हार्डवेयर गुणक नहीं हैं। हकीकत में, आप डिग्री के लिए एक लुकअप टेबल और वहां से एक साधारण रैखिक सन्निकटन का उपयोग कर सकते हैं और यह महत्वपूर्ण नहीं है कि अंतर भी कभी नहीं जानते।
जोड़ा लेखक Dan, स्रोत
इसके अलावा यदि आप 1 डिग्री की सटीकता वाले कोणों को देख रहे थे, तो आपको केवल तालिका में 90ish मानों की आवश्यकता होगी। अन्य सभी को पहले चतुर्भुज के कोणों से लिया जा सकता है। यदि आप साइन और कोसाइन के लिए ऐसा करते हैं, तो आप इनके रूप में टेंगेंट के मानों को प्राप्त कर सकते हैं: tan (theta) = sin (theta)/cos (theta)। क्या आपको आर्केसिन, आर्ककोस और आर्कटन भी करने की ज़रूरत है?
जोड़ा लेखक svec, स्रोत

थोड़ा देर हो चुकी है, लेकिन यहां ट्रिग फ़ंक्शंस के लिए एक PicBasic Pro समाधान है। यह कॉर्डिक असेंबली का उपयोग तेजी से गणना के लिए फ़ाइल शामिल करता है। पाप (एक्स) और कोस (एक्स) का परिणाम देता है, या लगभग 16 बिट परिशुद्धता के साथ atan2 (x, y) का परिणाम देता है।

http://www.picbasic.co.uk/forum/showthread.php ? टी = 10528

1
जोड़ा

सी ++ के लिए, बूस्ट.रैंडम शायद आप जो खोज रहे हैं। इसमें एमटी (कई अन्य एल्गोरिदम के बीच) के लिए समर्थन है, और nondet_random वर्ग के माध्यम से एंट्रॉपी एकत्र कर सकता है। इसकी जांच - पड़ताल करें! :-)

0
जोड़ा

The Gnu Scientific Library (GSL) has a pretty extensive set of RN generators, test harness, etc. If you're on linux, it's probably already available on your system.

0
जोड़ा

सी ++ 11 ने boost.random पर आधारित एक मजबूत यादृच्छिक संख्या लाइब्रेरी अपनाई है। आप अपनी गुणवत्ता, गति या आकार की आवश्यकताओं को पूरा करने के लिए विभिन्न एल्गोरिदम का उपयोग करके कई यादृच्छिक संख्या इंजनों तक पहुंच सकते हैं। गुणवत्ता कार्यान्वयन आपके कोड को std :: random_device के माध्यम से प्रदान किए जाने वाले गैर-निर्धारिती आरएनजी तक पहुंच प्रदान करेगा।

इसके अलावा विशिष्ट वितरण का उत्पादन करने के लिए कई एडेप्टर हैं, हाथ से इस तरह के हेरफेर करने की आवश्यकता को खत्म करना (कुछ गलत तरीके से किया जाता है)।

#include

0
जोड़ा

Boost.Random is my first choice for RNG

http://www.boost.org/doc/libs/random

0
जोड़ा
आप बस गूढ़ते हुए बूस्ट यादृच्छिक खोज सकते हैं कि मैं किसी भी लिंक प्रदान क्यों करता हूं। अब मैंने इसे lib के लिंक के साथ अपडेट किया है।
जोड़ा लेखक Rohit Vipin Mathews, स्रोत

जीएनयू वैज्ञानिक पुस्तकालय के लिए देखें। यह एलजीपीएल की बजाय जीपीएल के तहत लाइसेंस प्राप्त है।

जैसा कि अन्य लोगों ने उल्लेख किया है, बूस्ट यादृच्छिक कक्षाएं अच्छी शुरुआत हैं। उनका कार्यान्वयन टीआर 1 के लिए पीआरएनजी कोड के अनुरूप है:

http://www.boost.org/doc/libs/1_35_0/libs/random/index.html http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1452.html

यदि आपके पास G ++ कंपाइलर का हालिया संस्करण है, तो आप पहले से ही शामिल TR1 पुस्तकालयों को पा सकते हैं

0
जोड़ा