繁体   English   中英

跨编译器的 IEEE-754 二进制模式一致性的浮点文字

[英]Floating-point literal to IEEE-754 binary pattern consistency across compilers

这是一个关于“跨平台浮点一致性”的问题,但它专门讨论运行时一致性(IEEE 浮点)。

我对编译时一致性感兴趣,特别是:

如果我有一个特定的浮点数,并且想要在我的源代码中放入一个浮点文字,并且让每个针对 IEEE-754 架构的编译器将其编译为实际上与浮点(或双精度)相同的位模式:我需要做什么?

  • 一定数量的数字?
  • 该位模式的确切十进制数(而不是映射到该二进制模式的任何十进制数)?
  • 或者?

(我知道多年来一直存在争议,您需要做什么才能将浮点值从 IEEE 格式转换为十进制表示并返回,我不知道这是否是浮点文字和编译器(和 C++ 标准)。)

您可以利用这样一个事实,虽然每个十进制浮点数在 IEEE-754 浮点表示(使用二进制)中都没有精确表示,但每个 IEEE 浮点数都有一个作为十进制浮点数的精确表示.

[lex.fcon] (“浮动文字”)中的 C++ 语言规范讨论了浮点文字。 在描述了浮点文字的所有部分之后,它说

如果缩放值在其类型的可表示值范围内,则结果是缩放值(如果可表示),否则以实现定义的方式选择最接近缩放值的较大或较小的可表示值。

(此工作在 N3242、C++11 后期工作论文和 2018 年的 N4741 中相同。我无法在CPPReference上找到此描述。)

这意味着像0.1这样的数字可以比期望值略小或略大,其他像0.50.000000000931322574615478515625 (2 -30 ) 的数字将在所有符合标准的编译器中具有该值。

您需要取十进制数,在它之前或之后获得该数字的 IEEE-754 表示,然后将该表示转换为等效的十进制数。 一旦有了它,所有支持 IEEE-754 浮点格式的符合标准的编译器都应该为您提供完全相同的常量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM