【问题标题】:If the next representable value after -0.0 is +0.0, then why nextafter(-0.0, INFINITY) does not return +0.0?如果 -0.0 之后的下一个可表示值是 +0.0,那么为什么 nextafter(-0.0, INFINITY) 不返回 +0.0?
【发布时间】:2021-06-28 09:44:38
【问题描述】:

如果-0.0之后的下一个可表示值是+0.0,那么为什么nextafter(-0.0, INFINITY)不返回+0.0

【问题讨论】:

  • 返回什么?
  • 为什么要这样?我没有看到逻辑。
  • 基本上,我建议 -0.0+0.0 代表 same 值。 From cppreference:IEC 60559 建议只要 from==to 就返回 from。这些函数改为返回,这使得零附近的行为保持一致:std::nextafter(-0.0, +0.0) 返回 +0.0 和 std::nextafter(+0.0, -0.0) 返回 -0.0。跨度>
  • @AdrianMole 你应该把它写成答案
  • @klutt Meh。也许 Sneftel 可以使用它来编辑他们的答案,这基本上是同一点。

标签: c floating-point c11 math.h c17


【解决方案1】:

如果 -0.0 之后的下一个可表示值是 +0.0 ....

错误前提。
-0.0+0.0 具有相同的
if (-0.0 == +0.0)true

nextafter()“函数确定下一个可表示的”(C17dr § 7.12.11.3 2)

nextafter(-0.0, INFINITY)nextafter(+0.0, INFINITY) 都返回 DBL_TRUE_MIN


+0.0-0.0 通常在功能上没有区别。有时他们确实会创建difference


高级:为具有预期十进制浮点支持的 C2X 做好准备,因为decimal64 的许多编码集具有相同的。重复使用nextafter()和朋友,并不会通过所有的FP编码形成一个序列。

【讨论】:

  • 好的,所以对于-0.0下一个可表示的值不是+0.0,因为+0.0相同的值,而不是下一个值。
  • 都是关于术语的。如果+0.0-0.0 相同,那么+0.0 是否会成为-0.0 之后的下一个数字? IE。 +0.0-0.0 有什么不同?
  • @pmor 嗯,听起来你想要一些 sequence 功能。像total-ordering predicate 这样的短语更像nextafter()。也许@Peter Cordes 可能会有所帮助。
  • 仅供参考:刚刚遇到a - b = c => b = a - c 的情况,如果a0.0 并且b-0.0,则它无法成立。我们有0.0 - (-0.0) = 0.0 => b = 0.0 - 0.0 = 0.0。标志丢失。 -0.0 未恢复。
【解决方案2】:

因为 +0 不是“在”-0 之后,因为它比较等于 -0。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    相关资源
    最近更新 更多