Similar to this question我正在制作一个步调一致的 P2P 虚拟世界,并且由于使用固定点而不是 float 而遇到了松弛。
我试图制定可移植 float 的基准,但发现 GCC 不支持 -fp-model=strict :(
IEEE 754-2008 第 11 条解决了使 float 在不同实现中表现一致的问题。但是 C/C++ 标准是否反射(reflect)了这一点?
ICC 有 -fimf-arch-consistency=true 但不可移植。
使用软件库是获得一致性 float 的唯一方法吗?
编辑:Annex-F 是 IEC 60559:1989,相当于 IEEE 754-1985 '11。 “可重现的浮点结果”直到 IEEE 754-2008 才添加,并表示“语言标准应该支持可重现的编程”。根据 WikiP 的说法,这意味着它是可选的,即使这样,它也只有在您告诉它如此时才可以重现。
最佳答案
如果您坚持基本算术,请使用标准一致性选项(-std=c11
而不是 gnu11
,不要使用诸如 -ffast-math< 之类的虚假内容
),并注意其他一些微妙之处,float
算术在所有 float_t
为 的符合附件 F 的实现上是完全确定性和一致的float
,对于 double
的实现也是如此,其中 double_t
是 double
。这是很多约束,如果没有 softfloat,最后一个约束(“无超额精度”)可能根本无法满足。
无论谁在使用定点方面给你带来困难,他都错了。浮点运算不适合需要确定性和同步的机制。即使满足上述所有约束,它仍然不是平移不变的 - 它的行为在“远离原点”和“靠近原点”时有显着不同。
浮点非常适合表示层。在那里使用它。对于机制/模拟层,不需要。
关于c - 可移植一致浮标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57931671/