在不同的编译器中运行c++代码会产生不同的结果吗
Does running a c++ code in different compilers create different results
当我在visualstudio中运行时,我有一个代码,我会得到不同的结果,而当我使用g++编译器运行时,会获得不同的结果。它的种子是1,所以我想这应该不会影响它。此外,代码的一些部分在线程中运行(但这部分不包含任何rand函数)
通过在同一平台上运行应用程序,我得到了相同的结果,但如果我使用不同的编译器,则会有所不同
对于标准定义的所有行为,所有编译器生成的程序必须以相同的方式运行。
对于标准未指定的所有行为,编译器不需要执行相同的行为。例如,该标准对违反该标准的程序不作任何保证。该标准还留下了许多细节有待实施。
此外,编译器往往不总是在所有情况下都符合标准,有些编译器可能不支持与另一个版本相同的标准。
最后,一些标准规则被发现是模棱两可的,不同的编译器可能选择了相反的解释。这些应记录为缺陷报告。
。。种子rand函数。。。
rand
产生的随机序列是实现定义的。是的,不同编译器的结果可能不同。
C++11引入了<random>
标头。在那里定义的随机数生成器中,default_random_engine
是唯一一个具有实现定义行为的生成器。
如果您想要一个可复制的伪随机数,请使用C++工具,这样您就可以选择一个定义良好的生成器。
C伪随机数生成器不能保证在编译器或平台之间是相同的。
伪随机数的生成是一个非常棘手的问题。最好使用第三方图书馆。例如,GNU科学库中包含几个随机数生成器(https://www.gnu.org/software/gsl/)。当我需要一个可复制的随机数生成器时,我倾向于使用Mersenne Twister,这是GSL的默认值。
密码学的随机数生成是与其他库一起完成的。
你也可以测试你的发电机的质量是使用Die Harder II(https://www.phy.duke.edu/~rgb/General/diehard.php)。是的,从技术上讲,你无法判断某个东西有多随机,但如果你能在其中找到一个模式,它绝对不是随机的。
- 在运行时使用范围更新结果
- 我们如何并行运行算法的 n 个实例并以有效的方式计算结果函数的平均值?
- 我在运行函数 GetVolumeInformation() 时得到非常随机的结果
- 在运行时记录 LLVM 中分支指令的结果
- 在向量上声明缩减,在 1 个线程上运行给出的结果与没有 openmp 的结果不同
- 简单的程序比较阵列运行但给出不正确的结果
- C 编程:在循环时运行 2 并从 loop1 获取数据的随机结果
- 在C /OBJ-C 中运行Tensorflow分类器模型与Python的结果不同
- 在运行libtorch的模型时获得的结果是不正确的,该模型经过训练并从Pytorch出口
- 由 startproc 运行的程序的 QDir::homePath() 的非预期结果
- 并行和顺序运行代码时会产生不同的结果
- *char数组到字符串(两次运行代码和两个不同的结果)
- 在CLION中调试模式和运行模式之间的怪异结果
- 在不同的编译器中运行c++代码会产生不同的结果吗
- 在单元测试(Nunit或MSTest)中从C#中调用的C 函数的原因是从控制台应用程序中运行的同一代码的不同结果
- 运行CMD命令并将结果获取到字符串变量
- 将一个进程标准输出重定向到管道将产生不同的运行结果
- 在 arduino 中运行代码时不显示输出结果
- 着色器中实现双精度cos()的结果是NaN,但在CPU上运行良好.出了什么问题
- 代码可以运行,但不在 Eclipse 中显示结果。