【问题标题】:Portable Consistent Floats便携式一致浮动
【发布时间】:2019-09-14 00:53:50
【问题描述】:

Similar to this question 我正在制作一个步调一致的 P2P 虚拟世界,我遇到了使用定点而不是浮点数的松弛。

我试图对可移植浮点数进行基准测试,但发现 GCC 不支持 -fp-model=strict :(

IEEE 754-2008 第 11 条规定了使浮点在不同实现中的行为一致。但是 C/C++ 标准是否反映了这一点?

ICC 有 -fimf-arch-consistency=true 但这不是可移植的。

获得一致性浮动的唯一方法是使用软件库吗?

编辑:附件 F 是 IEC 60559:1989,相当于 IEEE 754-1985 '11。 Reproducible floating-point results',直到 IEEE 754-2008 才被添加,并说“语言标准应该支持可重复的编程。”根据 WikiP,这意味着它是可选的,即使这样,它也只有在你告诉它是这样时才能重现。

【问题讨论】:

  • “但是 C/C++ 标准是否反映了这一点?” --> 研究__STDC_IEC_559__

标签: c floating-point portability


【解决方案1】:

如果您坚持基本算术,请使用符合标准的选项(-std=c11 而不是 gnu11,没有像 -ffast-math 这样的虚假内容),并注意其他一些细微之处,float 算术完全在float_t 是float 的所有符合附件F 的实现上具有确定性和一致性,对于double 在double_t 是double 的实现上也是如此。这是很多约束,如果没有 softfloat,最后一个(“没有过度精度”)可能根本无法满足。

谁让你很难使用定点是错了。浮点运算不适用于需要确定性和同步的机制。即使您满足上述所有约束条件,它仍然不是平移不变的 - 它在“远离原点”和“靠近原点”的行为上存在显着差异。

浮点非常适合表示层。在那里使用它。对于机械/模拟层,不要。

【讨论】:

  • Annex-F 只是 IEEE 754 下所说的。 '11.可重现的浮点结果',“可重现的结果需要语言标准、语言处理器和用户的合作。语言标准应支持可重现的编程。......并且应明确定义: ― 哪种语言元素对应于哪种支持的可重现格式。 ― reproducible-results 属性,如 4.1 中所述,其值指示何时需要可再现结果或不需要可再现结果。语言标准定义了默认值。"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-01
  • 2011-02-20
  • 2016-06-20
  • 2011-03-06
  • 2013-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多