[英]Function that returns whether the floating-point type is fully compliant to 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.5
或0.000000000931322574615478515625
(2 -30 ) 的数字将在所有符合标准的编译器中具有该值。
您需要取十进制数,在它之前或之后获得该数字的 IEEE-754 表示,然后将该表示转换为等效的十进制数。 一旦有了它,所有支持 IEEE-754 浮点格式的符合标准的编译器都应该为您提供完全相同的常量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.