kov*_*rex 32 c++ lua printf string-formatting
我们有一个需要确定性的游戏,因为它是多人游戏模型的一部分.我们还使用Lua,它在sprintf内部使用(格式为%.14g).
打印数字如0.00001时会出现问题.在某些情况下,它会打印1e-05,在某些情况下,它会打印1e-005(额外为零).
例如,当使用Visual Studio 2015进行编译时,它会进行打印1e-005,并使用Visual Studio 2013进行打印1e-05.我尝试了不同的区域设置,但似乎没有任何效果.
问题是:实现确定性结果的最佳解决方案是什么? 我不关心科学记谱法是否标准化或消除.
我想到的解决方案:
%f符号时,它不会忽略无关紧要的零,因此%.14f会导致不切实际的长数.sprintf方法(从某些标准库粘贴的副本)一年后,我们就是这样解决的。
我们下载了自定义打印实现(三重奏)并强制使用此实现,而不是 lua(以及我们的源代码)中的系统实现。
我们也不得不改变
long double trio_long_double_t;
Run Code Online (Sandbox Code Playgroud)
到
double trio_long_double_t;
Run Code Online (Sandbox Code Playgroud)
在 triodef.h 中确保 Visual studio 和 linux/mac 给出相同的结果。