Chciałbym utworzyć losową (równomiernie rozproszoną) liczbę całkowitą o wartości 256bit w Dart. Dawka w trybie losowym obsługuje tylko 32-bitowe liczby całkowite. Jakieś pomysły?Jak utworzyć losową 256-bitową liczbę całkowitą w Dart?
Odpowiedz
import "dart:math";
// 16bit, because random.nextInt() only supports (2^32)-1 possible values.
const PARTS = 16; // 256bit/16bit
void main() {
Random rand = new Random();
int combinedVal = 0;
// random parts
for(var i=0;i<PARTS;i++) {
int part = rand.nextInt(1<<16); // 2^16
print("Part $i: $part");
// shift the 16bit blocks to the left and append the new block
combinedVal <<= 16;
combinedVal += part;
print("Combined: $combinedVal");
}
print("Final Result: $combinedVal");
}
wyjściowa (Aplikacja konsoli):
Part 0: 4273569419
Combined: 4273569419
Part 1: 2298770505
Combined: 18354840894089491529
Part 2: 1076269765
Combined: 78833441363397765815400305349
Part 3: 500743884
Combined: 338587052486927055616611084622869610188
Part 4: 1660193956
Combined: 1454220317280387171410917722806313469431388605604
Part 5: 1335995533
Combined:9776937558322317
Part 6: 2409230726
Combined: 26825630019660005909515912993248305589473794217828668028446551175558
Part 7: 3743170719
...
EDIT
Jak Darshan Computing zauważył w komentarzach, aby to działało z dart2js, potrzebne są pewne zmiany, a to spowodowałoby utratę precyzji. Aby użyć tej opcji w przeglądarce, potrzebna byłaby biblioteka zewnętrzna i js interop. Jako przykład, użyłem Leemon Bairda public domain BigInt library
plik HTML: Plik
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Web Playground</title>
<link rel="stylesheet" href="web_playground.css">
<script src="BigInt.js"></script> <!-- this is the important part -->
</head>
<body>
<h1>Web Playground</h1>
<script type="application/dart" src="web_playground.dart"></script>
<script src="packages/browser/dart.js"></script>
</body>
</html>
Dart:
import "dart:html";
import "package:js/js.dart" as js;
void main() {
var rand = js.context.randBigInt(256,0);
window.alert(js.context.bigInt2str(rand,10));
}
Dzięki poniższym komentarzom stwierdziłem, że w zależności od środowiska wykonawczego, użytkownik int
class może mieć dowolny rozmiar lub ograniczony do 53 bitów.
W pierwszym przypadku można po prostu skonstruować losową wartość z wielu fragmentów za pomocą operatorów zmian. Ponieważ nextInt
nie obsługuje maksimum 2 - 1 (jego argument max
zezwala na tę wartość, ale jest to exclusive, więc otrzymasz jedną mniejszą wartość posisble), możesz to zrobić w porcjach 16 bitów . Zacznij od zera iw każdym kroku przesuń aktualną wartość pozostawioną przez 16 bitów przed dodaniem kolejnej 16-bitowej liczby całkowitej (to znaczy jednej z 2 jako argumentem max
). Po 16 iteracjach zgromadzisz 256 bitów.
Po skompilowaniu do JavaScript, int
ma tylko 53 znaczące bity. W takim przypadku musisz mieć dowolną implementację liczby całkowitej, używając biblioteki innej firmy lub samodzielnie, być może w oparciu o pomysły z http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic. Gdy masz dużą klasę całkowitą, generowanie losowego elementu powinno być łatwe, ponieważ najprawdopodobniej wewnętrzna reprezentacja dużych liczb całkowitych będzie składała się w każdym razie z 16 lub 32 bitowych jednostek.
- 1. wygenerować losową 64-bitową liczbę całkowitą
- 2. Jak wygenerować "dużą" liczbę losową w Pythonie?
- 3. Zdobądź losową liczbę całkowitą w przedziale (X, Y]
- 4. Jak utworzyć losową liczbę po logormalnej dystrybucji w programie excel?
- 5. wybrać losową liczbę losową liczbę razy, ale nigdy taką samą liczbę losową dwukrotnie
- 6. Jak uzyskać liczbę losową w FactoryGirl?
- 7. Jak wygenerować losową liczbę w eliksiru?
- 8. Jak uzyskać losową liczbę w zestawie szablonów?
- 9. Jak wygenerować losową unikalną liczbę w PostgreSQL za pomocą funkcji
- 10. Jak utworzyć losową permutację tablicy?
- 11. jak wygenerować liczbę całkowitą losową w fortranie 90 w zakresie [0,5]?
- 12. Jak wygenerować losową 64-bitową liczbę całkowitą bez znaku w C
- 13. Jak wygenerować losową liczbę z 8 cyframi w C#? (4 całkowitą, 4 część ułamkową)
- 14. Jak uzyskać losową liczbę z hałasu atmosferycznego?
- 15. Jak przypisać losową liczbę do zmiennej?
- 16. wygenerować krótką liczbę losową w java?
- 17. Jak utworzyć instancję niestandardowego elementu Dart Polymer w kodzie Dart?
- 18. Jak ustawić losową liczbę całkowitą jako wartość domyślną dla Django CharField?
- 19. QByteArray na liczbę całkowitą
- 20. formatowania liczbę całkowitą C++
- 21. Jak uzyskać całkowitą liczbę tabel w postgresql?
- 22. Jak zwrócić liczbę całkowitą w java?
- 23. jak uzyskać całkowitą liczbę slajdów w flexslider
- 24. Jak pomnożyć liczbę całkowitą w C?
- 25. Jak poprawnie przeanalizować liczbę całkowitą w PHP?
- 26. Jak sprawdzić liczbę całkowitą w C?
- 27. procedura oracle zwraca liczbę całkowitą
- 28. Jak wygenerować losową liczbę przy użyciu stanu funkcjonalnego?
- 29. Przechowuj wyliczanie jako liczbę całkowitą w RavenDB
- 30. Jak uzyskać liczbę całkowitą z MySQL jako liczbę całkowitą w PHP?
Miałem nadzieję na coś mniej wyraźnego, ale dziękuję za odpowiedź. – gmosx
Należy zauważyć, że działa to tylko w maszynie Dart VM. OP nie określił, czy potrzebne było wsparcie dla przeglądarki; może tak być. –
@DarshanComputing dobry punkt. jest to możliwe (jeśli sama przeglądarka go obsługuje), ale musisz trochę popracować nad dart2js. edycja odpowiedzi. – MarioP