【问题标题】: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 语句不会起作用吗?

标签: c++ gcc visual-c++ floating-point c++17


【解决方案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 具有更纯粹的零有效位;常规舍入规则和舍入为整数的规则更喜欢带有更多尾随零的结果。但我同意这些规则没有明确扩展。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
  • 2012-01-04
  • 1970-01-01
  • 2020-02-29
  • 2010-10-27
  • 1970-01-01
相关资源
最近更新 更多