gpt4 book ai didi

c - `nextafter` 和 `nexttoward` : why this particular interface?

转载 作者:太空狗 更新时间:2023-10-29 15:31:19 27 4
gpt4 key购买 nike

nextafter(和nexttoward)这个奇特的接口(interface)背后究竟是什么原因functions ?我们通过指定要朝向 移动的值来指定方向

乍一看,这个想法背后似乎隐藏着一些不明显的东西。在我(幼稚的)看来,此类函数的首选类似于一对单参数函数 nextafter(a)/nextbefore(a)。下一个选择是双参数函数 nextafter(a, dir),其中明确指定方向 dir(-1+1,一些标准枚举等)。

但我们必须指定一个,我们希望移动。因此有很多问题

  1. (一个模糊的)。可能有一些聪明的想法或惯用模式非常有值(value),以至于影响了这些标准功能中的接口(interface)选择。有吗?

  2. 如果决定盲目地使用 -DBL_MAX+DBL_MAX 作为 nextafter 的第二个参数来指定负数和分别为正方向。这样做有什么陷阱吗?

  3. (2 的细化)。如果我确定 b [稍微] 大于 a,是否有任何理由更喜欢 nextafter(a, b) 而不是 下一个(a,DBL_MAX)?例如。 nextafter(a, b) 版本是否有更好的性能?

  4. nextafter 通常是繁重 操作吗?我知道它依赖于实现。但是,再次假设一个基于 IEEE 754 表示的实现,找到相邻的浮点值是否相当“困难”?

最佳答案

对于 IEEE-754 二进制浮点表示,如果 nextafter 的两个参数都是有限的并且两个参数不相等,则可以通过对重新解释为无符号整数的数字表示 [注 1]。 (轻微)复杂性源于正确处理不满足这些先决条件的极端情况,但通常您会发现它非常快。

除了 NaN 之外,第二个参数唯一重要的是它是大于、小于还是等于第一个参数。

该界面基本上为极端情况的结果提供了额外的清晰度,但它有时也很有用。特别是 nextafter(x, 0) 的用法,无论符号如何截断,通常都很方便。您还可以利用 nextafter(x, x);x 的事实将结果限制在任意值。

nextafternexttowards 的区别是后者允许你使用更大的动态范围long double;同样,这有助于解决某些特殊情况。


  1. 严格来说,如果第一个参数是某个符号的零,而另一个参数是相反符号的有效非零数,则该参数需要在递增之前翻转其符号位。但将其添加到列表中似乎过于法律术语,而且它仍然算不上是一个复杂的转换。

关于c - `nextafter` 和 `nexttoward` : why this particular interface?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52063370/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com