You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++编译器能否采用射影无穷实现浮点数?

关于C++中浮点数负无穷实现的合规性疑问

本问题灵感来自两个Stack Overflow问题:一个关于负无穷,另一个关于浮点数全序。

笔者认为,只要合理解读C++标准,当std::numeric_limits<float>::has_infinity为真时,-std::numeric_limits<float>::infinity()就保证有效,无论std::numeric_limits<float>::is_iec559是否为真。

但在针对负无穷问题发布支持该观点的答案前,需解决一个次要问题:能否以infinity == -infinity(射影空间中的运作方式)的方式实现带(负)无穷的float,同时保持合规性与实用性?

若-infinity不小于所有其他浮点数,便毫无用处。但如果infinity == -infinity,该值需同时大于和小于所有其他浮点数,这违背了实数的严格全序(无穷的比较无法满足传递性,否则毫无意义)。不过正如浮点数全序的问题所示,浮点数因NaN已偏离严格全序,但仍被视为全序类型。

标准中是否存在条款,禁止在-std::numeric_limits<float>::infinity() == std::numeric_limits<float>::infinity()的情况下,实现有意义的-std::numeric_limits<float>::infinity()?

无需多言,这种实现不会采用IEEE754/IEC559浮点数标准,不遵循该标准的实现会脱离标准的诸多约束。但此类实现极为罕见,因此需聚焦标准解读,而非现有编译器行为、逻辑判断或个人偏好。

内容的提问来源于stack exchange,提问作者Spencer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 01:17:36