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

What is the difference between logb() and ilogb()?

本文关键字:区别 什么 ilogb logb      更新时间:2023-10-16

如果我理解正确,ilogb()也会处理0NaN参数(并返回FP_ILOGB0FP_ILOGBNAN),而logb()抛出域错误。据我所知,没有理由使用logb().这两个函数之间是否有任何其他差异,是否有任何理由使用logb()而不是ilogb()

除了返回类型,如果函数的参数为零、无限或 NaN 则返回值,函数之间的返回值没有区别。

对于ilogb

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

但是,POSIX标准在功能使用方面略有不同。

对于ilogb

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

POSIX 还要求,在符合 XSI 标准的系统上,正确结果大于INT_MAX时返回的值INT_MAX正确结果小于INT_MIN时返回的值INT_MIN

对于logb

POSIX 要求在 arg±0时发生极点误差。

来自 POSIXilogb标准:

成功完成后,这些函数应将 x 的指数部分作为有符号整数值返回。它们等效于调用相应的 logb() 函数并将返回值强制转换为类型int