zoo*_*zoo 10 c++ random deterministic non-deterministic
我所谓的确定性程序会在不同的运行中产生一些略有不同的输出.输入,编译器和计算机是不变的.我不确定哪个输出是正确的,因为它看起来总是合理的.
除了对rand()的迷路调用之外,怎么可能呢?
如果输出取决于堆上分配的地址:
int main(int argc, char* argv[])
{
printf("%p", malloc(42));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对于每次运行,malloc()可能返回不同的虚拟地址 - 在分配失败的情况下更不用说NULL.
如果您的程序使用 float / double,如果某些架构上存在上下文切换,结果可能会有所不同。
在 x86 上,FPU 对中间结果使用扩展精度,但是当保存在内存中时(当进程或线程存在上下文切换时会发生这种情况),这种精度就会丢失。这可能会导致结果出现一些小偏差(我们在程序中检测到了此类问题)。避免此问题的一种方法是要求编译器不要使用 FPU 而使用 SSE 进行浮点运算。
http://www.network-theory.co.uk/docs/gccintro/gccintro_70.html