- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
nextafter
(和nexttoward
)这个奇特的接口(interface)背后究竟是什么原因functions ?我们通过指定要朝向 移动的值来指定方向。
乍一看,这个想法背后似乎隐藏着一些不明显的东西。在我(幼稚的)看来,此类函数的首选类似于一对单参数函数 nextafter(a)
/nextbefore(a)
。下一个选择是双参数函数 nextafter(a, dir)
,其中明确指定方向 dir
(-1
和 +1
,一些标准枚举等)。
但我们必须指定一个值,我们希望向移动。因此有很多问题
(一个模糊的)。可能有一些聪明的想法或惯用模式非常有值(value),以至于影响了这些标准功能中的接口(interface)选择。有吗?
如果决定盲目地使用 -DBL_MAX
和 +DBL_MAX
作为 nextafter
的第二个参数来指定负数和分别为正方向。这样做有什么陷阱吗?
(2 的细化)。如果我确定 b
[稍微] 大于 a
,是否有任何理由更喜欢 nextafter(a, b)
而不是 下一个(a,DBL_MAX)
?例如。 nextafter(a, b)
版本是否有更好的性能?
nextafter
通常是繁重 操作吗?我知道它依赖于实现。但是,再次假设一个基于 IEEE 754 表示的实现,找到相邻的浮点值是否相当“困难”?
最佳答案
对于 IEEE-754 二进制浮点表示,如果 nextafter
的两个参数都是有限的并且两个参数不相等,则可以通过对重新解释为无符号整数的数字表示 [注 1]。 (轻微)复杂性源于正确处理不满足这些先决条件的极端情况,但通常您会发现它非常快。
除了 NaN 之外,第二个参数唯一重要的是它是大于、小于还是等于第一个参数。
该界面基本上为极端情况的结果提供了额外的清晰度,但它有时也很有用。特别是 nextafter(x, 0)
的用法,无论符号如何截断,通常都很方便。您还可以利用 nextafter(x, x);
是 x
的事实将结果限制在任意值。
nextafter
和nexttowards
的区别是后者允许你使用更大的动态范围long double
;同样,这有助于解决某些特殊情况。
关于c - `nextafter` 和 `nexttoward` : why this particular interface?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52063370/
为什么以下代码在每次 std::nexttoward 函数调用时返回相同的数字? #include #include #include int main() { std::cout.pr
nextafter(和nexttoward)这个奇特的接口(interface)背后究竟是什么原因functions ?我们通过指定要朝向 移动的值来指定方向。 乍一看,这个想法背后似乎隐藏着一些不明
C++ 2011标准库的nextafter和nexttoward函数有什么区别? 最佳答案 由于函数源自 C,它们不能被重载,这意味着函数有两个不同的名称,但具有不同的参数(-type)。以下是原始签
正如标题所说,我所追求的功能是由 C++11 的数学库提供的,用于查找下一个指向特定值的浮点值。 除了从 std 库中提取代码(我可能不得不求助于它)之外,还有其他方法可以使用 C++03(使用 GC
使用 C 或 C++,我想在一个循环中递增所有可表示的 32 位 float 的范围,类似于您递增 32 位整数表示的所有不同值的方式。 类似于:对于( float f = FLOAT_MIN;f
我是一名优秀的程序员,十分优秀!