Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 如何在Dart中创建随机256位整数?_Math_Dart - Fatal编程技术网

Math 如何在Dart中创建随机256位整数?

Math 如何在Dart中创建随机256位整数?,math,dart,Math,Dart,我想在Dart中创建一个随机(均匀分布)的256位整数。 Dart的随机数仅支持32位整数。有什么想法吗?多亏了下面的评论,我发现根据执行环境的不同,您的大小可能是任意的,或者限制为53位 在前一种情况下,您可以使用移位运算符从多个代码段构造一个随机值。因为不支持包含的最大值为232− 1(它的max参数允许该值,但它是独占的,因此可以少得到一个posisable值),您可能希望在16位的块中执行此操作。从零开始,在每一步中,将当前值左移16位,然后再添加另一个16位整数(即以216作为max参

我想在Dart中创建一个随机(均匀分布)的256位整数。
Dart的随机数仅支持32位整数。有什么想法吗?

多亏了下面的评论,我发现根据执行环境的不同,您的大小可能是任意的,或者限制为53位

在前一种情况下,您可以使用移位运算符从多个代码段构造一个随机值。因为不支持包含的最大值为232− 1(它的
max
参数允许该值,但它是独占的,因此可以少得到一个posisable值),您可能希望在16位的块中执行此操作。从零开始,在每一步中,将当前值左移16位,然后再添加另一个16位整数(即以216作为
max
参数的整数)。经过16次迭代,您将累积256位

编译为JavaScript时,
int
只有53个有效位。在这种情况下,您必须有一个任意大小的整数实现,可以使用第三方库,也可以自己编写,可能是基于您的想法。一旦你有了一个大整数类,生成一个随机元素应该很容易,因为大整数的内部表示在任何情况下都很可能由16或32位的单位组成。

import“dart:math”;
//16位,因为random.nextInt()只支持(2^32)-1个可能的值。
常数部分=16;//256bit/16位
void main(){
Random rand=新的Random();
int combinedVal=0;
//随机部分

对于(var i=0;iI希望有一些不那么明确的东西,但感谢您的回复。应该注意的是,这只在Dart VM中有效。OP没有指定是否需要浏览器支持;它很可能是。@DarshanComputing很好。这是可能的(如果浏览器本身支持它),但您必须稍微处理一下dart2js。编辑答案。@MarioP问题是JavaScript不支持大整数,Dart团队还没有弄清楚他们要怎么做。编译成JavaScript后,您会遇到双整数。这使得您更新的代码也无法满足256位整数的要求。我可能错了,但按照我的理解,您传递给
nextInt
的值4294967295是一个独占绑定,因此该值本身永远不会返回。这意味着您错过了所有可能的值中的1/4294967296。这是否是一个问题取决于应用程序,但应该注意。@MarioP当然,在Dart VM中。@MarioP:谢谢洛特,我错过了那个细节。相应地调整了我的答案。JS版本的限制在修复之前是暂时的。@AlexandreArdhuin是的,想法是它最终会被修复,所以从这个意义上说它是“暂时的”。总有一天,Dart运行的任何地方都会有任意精度的整数。这是一个非常现实且非常相关的问题,在此之前都需要注意。在Dart 2.6中,有15年后,我们可以利用位旋转从两个无符号32位整数变为一个有符号64位整数。
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: 6245828703898006563427837796799909693532109776937558322317
Part 6: 2409230726
Combined: 26825630019660005909515912993248305589473794217828668028446551175558
Part 7: 3743170719
...