logb()和ilogb()有什么区别?

Dar*_*tom 6 c c++

如果我理解正确,则ilogb()也会处理0NaN参数(并返回FP_ILOGB0FP_ILOGBNAN),而logb()会引发域错误。据我所知,没有理由使用logb()。这两个函数之间是否还有其他区别,是否有任何理由logb()代替ilogb()

P.W*_*P.W 2

除了返回类型和函数参数为零、无穷大或 NaN 时的返回值之外,函数之间的返回值没有区别。

\n

为了ilogb

\n
\n

如果 arg 不为零、无限或 NaN,则返回的值完全等于static_cast<int>(std::logb(arg))

\n
\n

然而,与 POSIX 标准相比,函数的使用略有不同。

\n

为了ilogb

\n
\n

POSIX 要求如果arg为零、无穷大、NaN 或正确结果超出 的范围,则发生域错误int

\n

POSIX 还要求,在符合 XSI 的系统上,当正确结果大于INT_MAXis时返回值INT_MAX以及当正确结果小于INT_MINis时返回值INT_MIN

\n
\n

为了logb

\n
\n

POSIX 要求如果 arg 为 则发生极点错误\xc2\xb10

\n
\n