Answer-ID
  • Întrebări
  • Tag-uri
  • Categorii
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
Utilizator anonim

Generarea de numere aleatoare generalizate

Caut un RNG performant, robust, rezonabil, fără hardware special. Poate folosi metode matematice (Mersenne Twister, etc), poate "colecta entropia" din mașină, indiferent. Pe Linux / etc avem un drand48 () care generează 48 de biți aleatorii. Aș dori o funcție / clasă similară pentru C ++ sau C #, care poate genera mai mult de 32 de biți de aleatorie și care biți de ordin mic sunt la fel de aleatorii ca biții de înaltă ordine.

Nu trebuie să fie sigur din punct de vedere criptografic, dar nu trebuie să utilizeze sau să se bazeze pe limbajul C rand () sau .NET System.Random .

Orice cod sursă, link-uri la sursă etc. ar fi apreciat! În lipsă, ce tip de RNG ar trebui să caut?

37 2008-08-03T02:05:59+00:00 9
Programare
c#
random
c++
Comentarii la întrebare (0)
Jason S
1 decembrie 2009 в 12:16
2009-12-01T00:16:48+00:00
Mai mult
Sursă
Editează
#50778656

Acest subiect a fost discutat pe larg pe StackOverflow, este destul de independent de procesor și independent de limbă, cu excepția costurilor relative ale multiplicării/adăugării/căutării, ceea ce va face anumite implementări mai atractive.

  • Cum funcționează funcțiile trigonometrice?
  • Funcții rapide transcendente/trigonometrice pentru Java
  • Funcții trigonometrice pentru sistemele încorporate
  • Cum ar trebui abordați ARCTAN ...

Funcția atan2 (), sau conversia dreptunghiulară-polară, nu este complet implementabilă de către tabelele de căutare de dimensiuni rezonabile; CORDIC este o opțiune.

3
0
Comentarii (0)
Jax
23 noiembrie 2009 в 11:45
2009-11-23T11:45:14+00:00
Mai mult
Sursă
Editează
#50778655

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

2
0
Comentarii (0)
Dan
23 noiembrie 2009 в 12:02
2009-11-23T00:02:37+00:00
Mai mult
Sursă
Editează
#50778654

Sunteți de codificare pe un PIC, câte biți este unghiul dvs.? Dacă aveți un număr de 8 biți care vine, o masă de căutare în sus poate fi ușor, dacă aveți un număr de 16 biți vine, atunci este o poveste diferită.

În mod normal, în PIC numărul de 8 sau 10 biți este la fel de mare ca și cum veți obține, o masă de căutare sus este, probabil, în regulă. Oamenii se pierd adesea în obținerea unui număr mare de precizie, de obicei nu aveți nevoie de unul. Am avut pe cineva care citea un număr de 12 biți dintr-un senzor, folosind dublurile și obținând o conversie cu adevărat precisă. Acesta a funcționat perfect atunci când a folosit o sursă de tensiune ca o intrare pentru testare, dar adăugați un senzor real cu eroarea lui și veți găsi toată precizia este o pierdere de timp.

Există cazuri în care aș sugera folosirea unei funcții sin/cos/tan de înaltă calitate, nu am întâlnit niciodată unul pe un PIC. Iartă-mă dacă ai nevoie de o funcție de semn de înaltă calitate, eu răspund doar la ceea ce ar fi răspunsul potrivit pentru 95% din cazuri.

1
0
Comentarii (0)
Walter Dunckel
18 februarie 2012 в 4:38
2012-02-18T16:38:32+00:00
Mai mult
Sursă
Editează
#50778657

Un pic tarziu, dar aici este o solutie PicBasic Pro pentru functiile Trig. Acesta utilizează un ansamblu Cordic include fișier pentru calcule rapide. Dă rezultatul Sin (x) și Cos (x) sau rezultatul atan2 (x, y) cu o precizie de aproximativ 16 biți.

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

1
0
Comentarii (0)
Chris Jester-Young
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#602

Pentru C ++, Boost.Random este probabil ceea ce căutați. Are suport pentru MT (printre mulți alți algoritmi) și poate colecta entropia prin clasa nondet_random . Verifică! :-)

0
0
Comentarii (0)
Mark Harrison
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#605

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
0
Comentarii (0)
nsanders
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#10139

Fiți atenți la Biblioteca Științifică Gnu. Este licențiat sub GPL mai degrabă decât LGPL.

După cum au menționat alte persoane, clasele aleatoare Boost sunt un început bun. Implementarea lor este conformă cu codul PRNG plătit pentru TR1:

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

Dacă aveți o versiune recentă a compilatorului G ++, puteți găsi bibliotecile TR1 deja incluse

0
0
Comentarii (0)
Rohit Vipin Mathews
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#9923618

Boost.Random is my first choice for RNG

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

0
0
Comentarii (0)
bames53
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#11211443

C ++ 11 a adoptat o bibliotecă robustă de numere aleatorii bazată pe boost.random. Puteți accesa un număr de motoare cu numere aleatorii utilizând algoritmi diferiți pentru a vă satisface cerințele de calitate, viteză sau dimensiune. Implementările de calitate vor oferi chiar acces la orice RNG non-determinist pe care platforma dvs. îl oferă prin std :: random_device .

În plus, există multe adaptoare pentru a produce distribuții specifice, eliminând necesitatea de a face o astfel de manipulare manuală (ceva ce se întâmplă adesea incorect).

#include

0
0
Comentarii (0)
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
ID
KO
RU
© Answer-ID 2021
Sursă
https://stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire