C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 不同平台的generate_canonical输出是否一致?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
C标准在[rand.util.canonical]下非常详细地指出模板函数std :: generate_canonical如何工作(尽管它只呈现伪代码,而不是C代码).

规范作者的意图是,在RealType上的数学运算相同的不同平台上,对于在两个平台上提供相同输出的确定性URNG,std :: generate_canonical也提供相同的输出吗?

这与类似的问题有关,例如Is 1.0 a valid output from std::generate_canonical? – 散文声明1.0被排除在外,但它们在伪代码中给出的算法有时包括它作为输出以及RealType和URNG的某些组合.

这与随机数分布函数形成对比,例如,作为C++11 random number distributions are not consistent across platforms — what alternatives are there?;标准确实”’不”’指定如何生成正态分布,仅指定其属性

没有找到任何讨论这个问题的DR,标准的措辞在我容易访问的C 11,C 14和C 17草案标准中表面上是相同的.

解决方法

链接问题中遇到的困难指出了一致性的基本问题:舍入模式.标准中generate_canonical的数学定义的明确意图是URNG被多次调用,每个都产生一个非重叠的熵块来填充结果;这将在各个平台上完全一致.问题是,没有说明如何处理LSB下面的额外位.根据舍入模式和求和顺序,这些可以向上舍入,溢出到下一个块(这是允许1.0结果).

现在,准确的措辞是“实例化的结果……尽可能均匀地分布,如下所述”.如果舍入模式是舍入到最接近的,则产生1.0的实现不尽可能均匀(因为1-eps不太可能比1-2 * eps).但它仍然“如下所述”.因此,根据您解析该句子的方式,generate_canonical要么是完全指定的,要么是一致的,或者已经为实现委派了一些额外的未讨论的位.

在任何情况下,某些实现产生1.0的事实使得很明显当前行为不是跨平台一致的.如果你想要这样,似乎最直接的方法是将你的URNG包装在一个independenT_Bits_ENGIne中以产生一些比特位因子,所以从来没有任何东西可以舍入.

大佬总结

以上是大佬教程为你收集整理的c – 不同平台的generate_canonical输出是否一致?全部内容,希望文章能够帮你解决c – 不同平台的generate_canonical输出是否一致?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。