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,每次都会产生一个非重叠的熵 block 来填充结果;这将在各个平台上完全一致。问题是,没有给出关于如何处理 LSB 下面的额外位的指示。根据舍入模式和求和顺序,这些可以向上舍入,溢出到下一个 block (这是允许 1.0 结果的原因)。
现在,准确的措辞是“实例化的结果……按照下面的规定尽可能均匀地分布”。如果舍入模式是舍入到最近的值,则生成 1.0 的实现不是尽可能统一(因为 1-eps 比 1-2*eps 更不可能)。但它仍然“如下所述”。因此,根据您解析该句子的方式,generate_canonical 要么是完全指定且一致的,要么已将一些额外的未讨论位委托(delegate)给实现。
无论如何,某些实现产生 1.0 的事实清楚地表明当前行为不是跨平台一致的。如果您想要那样,似乎最直接的方法是将您的 URNG 包装在 independent_bits_engine 中以产生一些 bits 位的因子,因此没有任何东西可以四舍五入。
关于c++ - generate_canonical 输出是否跨平台一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42677592/
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
我正在使用puppet为ruby程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这
这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife
这是一道面试题,我没有答对,但还是很好奇怎么解。你有N个人的大家庭,分别是1,2,3,...,N岁。你想给你的大家庭拍张照片。所有的家庭成员都排成一排。“我是家里的friend,建议家庭成员安排如下:”1岁的家庭成员坐在这一排的最左边。每两个坐在一起的家庭成员的年龄相差不得超过2岁。输入:整数N,1≤N≤55。输出:摄影师可以拍摄的照片数量。示例->输入:4,输出:4符合条件的数组:[1,2,3,4][1,2,4,3][1,3,2,4][1,3,4,2]另一个例子:输入:5输出:6符合条件的数组:[1,2,3,4,5][1,2,3,5,4][1,2,4,3,5][1,2,4,5,3][
我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案
我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查
我的日期格式如下:"%d-%m-%Y"(例如,今天的日期为07-09-2015),我想看看是不是在过去的七天内。谁能推荐一种方法? 最佳答案 你可以这样做:require"date"Date.today-7 关于ruby-检查日期是否在过去7天内,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/32438063/
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下