是跨平台的生成_CANONICAL输出一致
Is generate_canonical output consistent across platforms?
c 标准在 [rand.util.caronical] 下非常紧密地指定了模板函数 std::generate_canonical
的工作方式(尽管它仅显示伪代码,而不是C 代码)。
是规格作者的意图,在RealType
上数学上工作的不同平台上,对于确定性的URNG
,在两个平台上给出相同的输出,std::generate_canonical
也给出了相同的输出吗?
这与类似的问题有关,例如1.0 std :: generate_caronical的有效输出? - 散文指出1.0被排除在外,但是它们在伪代码中给出的算法有时将其作为输出,而对于RealType
和URNG
的某些组合。
这与所讨论的随机数分布函数相反,例如,由于C 11随机数分布在平台之间不一致 - 那里有哪些替代方案?该标准确实是"不"的,例如如何生成正态分布,只是其属性
我还没有找到任何讨论的DR,并且标准的措辞在C 11,C 14和C 17草稿标准中在表面上相同,我可以轻松访问。
链接的问题点在基本问题上遇到的困难与一致性:圆形模式。标准中generate_canonical
的数学定义的明确意图是,urng被称为几次,每种都会产生一个非重叠的熵块,以填充结果;这将在平台之间完全一致。问题是,没有迹象表明如何处理LSB下方的额外位。根据舍入模式和求和顺序,这些可能会向上圆形,溢出到下一个块中(这允许1.0结果)。
现在,精确的措辞是"实例化的结果……尽可能按照以下指定的方式分布"。如果圆形模式是最新的,则产生1.0的实现不是尽可能统一(因为1-EPS的可能性低于1-2*EPS)。但这仍然是"如下所示"。因此,根据您如何解析该句子的方式,generate_canonical
是完全指定且一致的,或者已将一些额外的未讨论位委托给了实施。
在任何情况下,某些实现产生1.0的事实表明,当前行为不是跨平台一致的。如果您愿意的话,似乎最直接的方法是将您的尿液包裹在independent_bits_engine
中以产生一定因素的bits
位,因此没有任何东西可以解决。
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- C++格式化输出问题
- 将值从二维数组输出到文本文件
- 集合上的输出迭代器:assign和increment迭代器
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 为什么rk4.do_step不输出C++中的初始条件
- 输出没有重复元素的动态数组(收缩数组)C++
- 如何根据单词在文本中出现的概率输出单词