logb() 和 ilogb() 有什么区别?
What is the difference between logb() and ilogb()?
如果我理解正确,ilogb()
也会处理0
和NaN
参数(并返回FP_ILOGB0
和FP_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
。
相关文章:
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- Qt:remove() 和 rmdir() 有什么区别
- 这 4 个 lambda 表达式之间有什么区别?
- 将向量作为类>(值)<向量启动和向量<类>[值]有什么区别
- typedef 枚举和枚举类有什么区别?
- &C::c 和 &(C::c) 有什么区别?
- ascii 和 unicode 在处理级别有什么区别吗?
- C 中的常量限定符和 C++ 中的常量限定符有什么区别?
- "ABC" 和 "ABC" ) 在C++中有什么区别?
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 引用捕获和在 lambda 中通过引用发送参数有什么区别 (C++)
- 两种访问I2C总线的方法有什么区别?
- 两种模板示例有什么区别?
- 这两种C++语法之间有什么区别?
- lua 5.0.2 模块和 5.3.5 有什么区别?
- C++中"typedef"、"using"、"namespace"和"using namespace"有什么区别?
- std::vector和llvm::SmallVector之间有什么区别?什么时候用哪一个