【发布时间】:2019-03-06 18:10:44
【问题描述】:
这是一个question with answers on "Cross Platform Floating Point Consistency",但它专门讨论运行时一致性(IEEE 浮点)。
我对编译时的一致性感兴趣,具体来说:
如果我有一个特定的浮点数并想放一个 我的源代码中的浮点文字并具有每个编译器 针对 IEEE-754 架构将其编译为相同的位 实际上是浮动(或双重)的模式:我需要做什么?
- 一定的位数?
- 该位模式的确切十进制数(而不是映射到该二进制模式的任何十进制数)?
- 或者?
(我知道多年来,关于将浮点值从 IEEE 格式往返转换为十进制表示并返回的问题一直存在争议,我不知道这是否是浮点问题文字和编译器(以及 C++ 标准)。)
【问题讨论】:
-
如果可以使用 C++17,则可以使用十六进制浮点文字进行往返。我一直在为(比如说)数字滤波器系数、正交节点等执行此操作。避免了争议。
-
这是一个很好的答案——除了我目前碰巧仅限于 C++11。所以我也对“低级”C++ 感兴趣!
-
我想你会受苦的。如果您的问题有一个很好的答案,它没有使用十六进制浮点文字,那么为什么需要将它添加到 C++17 中?
-
注意:我不是这方面的专家,但请查看 Higham 数值算法的准确性和稳定性中的“制表者的困境”。我认为这表明你想要的东西是不可能的。
-
@user14717 - 好吧,也许有一些不方便和/或不明显的方法。我的意思是,既然我们已经有了十六进制和八进制文字,为什么还要添加二进制整数文字?
标签: c++ c++11 floating-point-conversion