【问题标题】:Does casting to or from a double and a float preserve infinity and NaN?转换为双精度浮点数或浮点数是否保留无穷大和 NaN?
【发布时间】:2021-07-02 06:23:47
【问题描述】:

当将双无穷大转换为浮点数时,反之亦然,它仍然是无穷大吗?和 NaN 一样吗?

【问题讨论】:

  • @NathanOliver:严格来说,这仅涵盖了这里询问的一半情况。在 IEEE754 中,64 位 NaN 的数量比 32 位 NaN 的数量多,因此从 32 位还是 64 位开始很重要。链接的问题假设您从 32 位开始;这个问题还考虑了从 64 位 NaN 之一开始的情况。并且由于有超过 40 亿个 64 位 NaN,鸽巢原理告诉我们不能保留 NaN payload(精确的二进制 NaN 表示)

标签: c++ floating-point nan


【解决方案1】:

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

如果您的系统符合 IEEE-754,则 float 可以表示无穷大和 NaN。否则,您可以使用<numeric_limits> 来检查是否是这种情况。双 NaN 的有效负载不一定可以用浮点 NaN 表示。

【讨论】:

  • 可能不支持 NaN 有效负载,因为这是 IEEE-754 中的 可选 功能(应该提供,而不是应提供)。例如,在 GPU 上运行 CUDA 时,双精度硬件支持 NaN 有效负载,而单精度硬件产生单个规范 NaN (0x7fffffff)。但在 doublefloat 的转换中,NaN 保持为 NaN。
猜你喜欢
  • 1970-01-01
  • 2010-10-08
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多