C++ 在双精度和浮点数之间施放或从双精度和浮点数之间施放是否能保持无穷大和NaN?

C++ 在双精度和浮点数之间施放或从双精度和浮点数之间施放是否能保持无穷大和NaN?,c++,floating-point,nan,C++,Floating Point,Nan,当将双无限转换为浮动,反之亦然时,它仍然是无限吗?与NaN相同吗?将任意浮点值转换为双精度浮点值可以保证保留该值。如果原始值可以表示为float,则将double转换为float可以保证保留该值 如果您的系统符合IEEE-754,则float能够表示无穷大和NaN。否则,您可以使用检查情况是否如此。双NaN的有效载荷不一定由浮点NaN表示。相关/dupe:@NathanOliver:严格地说,这只涵盖了这里所要求的一半案例。在IEEE754中,64位NaN比32位NaN多得多,所以从32位还是6

当将双无限转换为浮动,反之亦然时,它仍然是无限吗?与NaN相同吗?

任意浮点值转换为双精度浮点值可以保证保留该值。如果原始值可以表示为float,则将double转换为float可以保证保留该值


如果您的系统符合IEEE-754,则float能够表示无穷大和NaN。否则,您可以使用
检查情况是否如此。双NaN的有效载荷不一定由浮点NaN表示。

相关/dupe:@NathanOliver:严格地说,这只涵盖了这里所要求的一半案例。在IEEE754中,64位NaN比32位NaN多得多,所以从32位还是64位开始很重要。链接问题假设您从32位开始;这个问题还考虑了从一个64位NaN开始的情况。由于有超过40亿个64位NaN,鸽子洞原理告诉我们不能保留NaN有效载荷(确切的二进制NaN表示法),可能不支持NaN有效载荷,因为这是IEEE-754中的可选功能(应规定,而不是应规定)。例如,在GPU上运行CUDA时,双精度硬件支持NaN有效负载,而单精度硬件生成单个规范NaN(
0x7fffffff
)。但在双精度到浮点转换中,NaN保持为NaN。