转换到双精度和浮点数是否保留无穷大和NaN?
当施放双无穷大时,反之亦然,它仍然是无穷大吗?和 NaN 一样吗?
回答
将任何浮点数转换为双精度数可以保证保留该值。如果原始值可表示为浮点数,则将双精度数转换为浮点数可以保证保留该值。
如果您的系统符合 IEEE-754,则 float 能够表示无穷大和 NaN。否则,您可以使用<numeric_limits>来检查是否是这种情况。双 NaN 的有效负载不一定可以由浮点 NaN 表示。
- There may be no support for NaN payloads, because that is an *optional* feature in IEEE-754 (a should-provision, not a shall-provision). For example, when running CUDA on a GPU, the double-precision hardware supports NaN payloads, while single-precision hardware produces a single canonical NaN (`0x7fffffff`). But in a `double` to `float` conversion, a NaN stays NaN.