如何设置log10(0)的返回值?

mar*_*zzz 3 c++ double

代码

#include <iostream>
#include <math.h>

using namespace std;

int main ()
{
  double result = log10(0.0);
  cout << result;
}
Run Code Online (Sandbox Code Playgroud)

当我在 C++ 中执行 log10(0) 时,它会打印给我-inf

它对于我将使用的每个库/编译器都是固定的吗?

或者在不同的平台上它会改变吗?

您将如何管理pole error保管double

for*_*818 5

根据cplusplus 的说法,这取决于您所获得的库log10(0)。然而,一般来说 的值log10(0)是没有定义的(如果你愿意的话可以定义-inf,但它不是一个实数)。通常,您应该在此类未定义结果发生之前阻止它们(不是 C++ 意义上的未定义行为,而是数学意义上的未定义) 。例如

double x;
x = foo();
if ( x <= 0 ) {
    /* handle this case extra */
else {
    y = log10(x);
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下使用什么值log10(0)很大程度上取决于您的应用程序。0但是,我认为在进行计算之前进行检查比依赖log10(0)返回某些特定值(因为它可能是-inf或完全不同的值)更容易。

  • 实际上,考虑到所涉及的函数,检查“x&lt;=0”是安全的。不需要 epsilon。`abs` 是非常有害的,它会导致检查错过 `log10(-1)`。 (2认同)