Tôi muốn tạo một số nguyên 256 bit ngẫu nhiên (được phân bố đều) trong Dart. Ngẫu nhiên của Dart chỉ hỗ trợ các số nguyên 32 bit. Bất kỳ ý tưởng?Làm cách nào để tạo một số nguyên 256 bit ngẫu nhiên trong Dart?
Trả lời
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");
}
Output (giao diện điều khiển ứng dụng):
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
Như Darshan Computing chỉ ra trong các ý kiến, để làm công việc này với dart2js, một số sửa đổi là cần thiết, và điều này sẽ dẫn đến mất độ chính xác. Để sử dụng tính năng này với trình duyệt, bạn cần có thư viện bên ngoài và js interop. Như một ví dụ, tôi sử dụng public domain BigInt library
tập tin HTML Leemon Baird:
<!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 file:
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));
}
Nhờ nhận xét bên dưới, tôi thấy rằng tùy thuộc vào môi trường thực thi, bạn int
class có thể có kích thước tùy ý hoặc bị giới hạn ở 53 bit.
Trong trường hợp trước đây, bạn có thể chỉ cần tạo một giá trị ngẫu nhiên từ nhiều đoạn mã bằng cách sử dụng toán tử shift. Vì nextInt
không hỗ trợ tối đa 2 - 1 (đối số max
của nó cho phép giá trị đó, nhưng nó là độc quyền, vì vậy bạn nhận được một giá trị ít hơn), bạn có thể muốn thực hiện điều này theo khối 16 bit . Bắt đầu bằng không và mỗi bước dịch chuyển giá trị hiện tại còn 16 bit trước khi thêm một số nguyên 16 bit khác (tức là một số nguyên với 2 làm đối số max
). Sau 16 lần lặp, bạn sẽ tích lũy 256 bit.
Khi được biên dịch sang JavaScript, int
chỉ có 53 bit quan trọng. Trong trường hợp đó, bạn sẽ phải thực hiện kích thước số nguyên tùy ý, hoặc sử dụng một số thư viện của bên thứ ba hoặc tự viết, có lẽ dựa trên ý tưởng từ http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic. Một khi bạn có một lớp số nguyên lớn, việc tạo ra một phần tử ngẫu nhiên nên dễ dàng, vì hầu hết các biểu diễn bên trong của các số nguyên lớn sẽ bao gồm 16 hoặc 32 bit đơn vị trong mọi trường hợp.
- 1. Làm cách nào để tạo số ngẫu nhiên trong Dart?
- 2. tạo ngẫu nhiên số nguyên 64 bit
- 3. Số nguyên ngẫu nhiên
- 4. Trình tạo số ngẫu nhiên tạo số nguyên cho Java
- 5. Cách tạo số ngẫu nhiên "lớn" trong Python?
- 6. Cách nhanh nhất để tạo các bit ngẫu nhiên
- 7. Làm cách nào để tạo số ngẫu nhiên trên iPhone?
- 8. Làm cách nào để tạo số ngẫu nhiên bằng Python?
- 9. Làm cách nào để tạo một số nguyên n chữ số ngẫu nhiên trong Java bằng lớp BigInteger?
- 10. Làm cách nào để tạo phân vùng số nguyên ngẫu nhiên đồng đều?
- 11. Tạo một bộ tạo số giả ngẫu nhiên trong C#
- 12. Làm cách nào để tạo một đường dẫn ngẫu nhiên?
- 13. Làm thế nào để tạo ra một chuỗi các số nguyên dương ngẫu nhiên có thêm một số giá trị?
- 14. Tạo số ngẫu nhiên lớn
- 15. tạo số ngẫu nhiên ngắn trong java?
- 16. Tạo cùng một chuỗi số ngẫu nhiên
- 17. Làm cách nào để tạo các số ngẫu nhiên mà không có hàm rand()?
- 18. Tạo một số nguyên ngẫu nhiên trong một phạm vi trong Haskell
- 19. Cách tạo số ngẫu nhiên khác nhau?
- 20. tạo các số nguyên ngẫu nhiên với xác suất
- 21. Làm cách nào để tạo một số giả ngẫu nhiên mật mã trong C#?
- 22. Thuật toán để tạo số ngẫu nhiên
- 23. Trình tạo số ngẫu nhiên phân phối ngẫu nhiên
- 24. Tạo một dãy các số ngẫu nhiên
- 25. Làm thế nào để 'ngẫu nhiên()' số ngẫu nhiên trong C (Linux)?
- 26. Làm cách nào để truyền một trình tạo số ngẫu nhiên C++ 11 cho một hàm?
- 27. Cách tạo số ngẫu nhiên lớn C
- 28. Tạo số ngẫu nhiên CUDA
- 29. Cách tạo 5 số ngẫu nhiên với tổng số 100
- 30. Tạo một số thập phân ngẫu nhiên trong C#
Tôi hy vọng điều gì đó ít rõ ràng hơn, nhưng cảm ơn bạn đã trả lời anw. – gmosx
Nó thực sự cần lưu ý rằng điều này chỉ hoạt động trong máy ảo Dart. OP không xác định liệu có hỗ trợ trình duyệt hay không; nó cũng có thể được. –
@DarshanĐánh giá điểm tốt. nó có thể (nếu trình duyệt tự hỗ trợ nó), nhưng bạn phải làm việc xung quanh dart2js một chút. chỉnh sửa câu trả lời. – MarioP