将双精度舍入到最接近的非次正规表示
Posted
技术标签:
【中文标题】将双精度舍入到最接近的非次正规表示【英文标题】:Round double to nearest non subnormal representation 【发布时间】:2019-12-12 17:50:48 【问题描述】:在 C++ 中,(有时)subnormal doubles 是有限的,而不是 nan
并且不是零。
如何将它们四舍五入到最接近的非次正规双精度表示?
例如:std::isnormal(DBL_MIN/2.0) = false
【问题讨论】:
有趣的问题。您能否详细说明您为什么要这样做?一系列if
语句不会起作用吗?
【参考方案1】:
所有次正规的双星等都在 0 和 DBL_MIN
之间。如果一个值小于DBL_MIN
,只需将其与DBL_MIN/2
进行比较,将其四舍五入为其中之一。 (为了匹配通常的 IEEE-754 舍入行为,DBL_MIN/2
本身应舍入为 0。)
【讨论】:
一半的次正规值在-DBL_MIN
和零之间。
@EricPostpischil 是的,我决定将其作为对读者的顿悟。
DBL_MIN
和 0 都有偶数。虽然 0 当然是无限偶数,但我不知道这里有什么规则可以选择。
@DavisHerring 我的想法是 0 比 DBL_MIN 具有更纯粹的零有效位;常规舍入规则和舍入为整数的规则更喜欢带有更多尾随零的结果。但我同意这些规则没有明确扩展。以上是关于将双精度舍入到最接近的非次正规表示的主要内容,如果未能解决你的问题,请参考以下文章