浮点字面至IEEE-754二进制图案跨编译器的二元模式一致性
Floating-point literal to IEEE-754 binary pattern consistency across compilers
这是一个问题,上面有"跨平台浮点一致性"上的答案,但它仅与 Rundime 一致性(IEEE浮点)进行讨论。
。我对 compile time 一致性感兴趣,特别是:
如果我有一个特定的浮点数,并且想放一个 我的源代码中的浮点字面文字,并拥有每个编译器 针对IEEE-754体系结构将其编译到同一位 实际上是漂浮(或double)的模式:我需要做什么?
- 一定数量的数字?
- 该位模式的确切十进制数(而不是任何映射到该二进制模式的十进制数)?
- 或?
(我知道多年来一直争议您需要做什么才能从IEEE格式到小数表示往返浮点值,并且我不知道这是否是浮点的问题文字和编译器(以及C 标准)。)
您可以利用以下事实:虽然每个小数小数点浮点数都不具有IEEE-754浮点表示(使用二进制)中的IEEE-754浮点数IEEE浮点数具有精确的表示形式为十进制浮点数。
[lex.fcon]
("浮动文字")中的C 语言规范讨论了浮点文字。在描述了浮点字面的所有部分之后,它说
如果缩放值在其类型的可表示值范围内,则结果是缩放值如果表示,则较大或较小的可代表值最接近的缩放值,以实现定义的方式选择。
(在N3242,C 11较晚工作文件和2018年的N4741中,此工作都是相同的。我在CPPReference上找不到此描述。
这意味着像0.1
这样的数字可能比所需值稍小或稍微稍大一些,而其他数字(例如0.5
或0.000000000931322574615478515625
(2 -30 ))将具有所有符合编译器的值。p>您需要获取小数号,在其之前或之后获得该号码的IEEE-754表示,然后将该表示形式转换为等效的小数号。一旦拥有,所有支持IEEE-754浮点格式的编译器都应给您完全相同的常数。
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 为什么在保护模式下继承升级不起作用
- 如何在全屏模式下(在OpenGL中)使背景透明
- 为什么使用__LINE_的代码在发布模式下在MSVC下编译,而不是在调试模式下
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 此模式的C++RegEx
- avrogencpp能为模式中的每种类型生成单独的头文件吗
- 使用可变模板的Broadcaster/Listener模式
- c++方法参数只能在linux的发布模式下自行更改
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 资源管理设计模式
- 使用 mod_gsoap 部署服务时,如何在 Gsoap 中更改 soap 上下文的模式?
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 小字符串优化(调试与发布模式)
- 可视化C++:发布模式的运行时库作为'Multi-threaded Debug DLL'
- 如何设计具有不同类型的通知和观察器的观察者模式?
- 在C++的一系列数字中查找重复模式
- 是否允许使用带有"w+"模式的 freopen 进行标准设置?
- C++ 使用存储在动态数组中的文本文件中的数据查找模式
- 浮点字面至IEEE-754二进制图案跨编译器的二元模式一致性