计算对数。

语法

double log(double x);
float logf(float x);
long double logl(double x);
double log10(double x);
float log10f (float x);
long double log10l(double x);
#define log(X) // Requires C11 or higher
#define log10(X) // Requires C11 or higher

float log(float x);  // C++ only
long double log(long double x);  // C++ only
float log10(float x);  // C++ only
long double log10(long double x);  // C++ only

参数

x
要查找的值的对数。

返回值

如果操作成功,则 log 函数返回 x 的自然对数(以 e 为底数)。 log10 函数返回以 10 为底数的对数。 如果 x 是负数,那么默认情况下,这些函数将返回不定值 (IND)。 如果 x 为 0,则它们返回无穷大 (INF)。

输入 SEH 异常 _matherr 异常
± QNaN, IND _DOMAIN
± 0 ZERODIVIDE _SING
x < 0 INVALID _DOMAIN

loglog10 具有使用流式处理 SIMD 扩展 2 (SSE2) 的实现。 有关使用 SSE2 实现的信息和限制,请参阅_set_SSE2_enable

备注

C++ 允许重载,因此,可以调用采用并返回 floatlong double 值的 loglog10 重载。 在 C 程序中,除非使用 <tgmath.h> 宏来调用此函数,否则 loglog10 始终采用并返回 double

如果使用 <tgmath.h> log() 宏,参数的类型将确定选择哪个版本的函数。 有关详细信息,请参阅泛型类型数学

默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态

要求

例程 必需的标头
<math.h>
log <tgmath.h>

有关兼容性的详细信息,请参阅 兼容性

示例

// crt_log.c
/* This program uses log and log10
* to calculate the natural logarithm and
* the base-10 logarithm of 9,000.
*/

#include <math.h>
#include <stdio.h>

int main( void )
{
   double x = 9000.0;
   double y;

   y = log( x );
   printf( "log( %.2f ) = %f\n", x, y );
   y = log10( x );
   printf( "log10( %.2f ) = %f\n", x, y );
}
log( 9000.00 ) = 9.104980
log10( 9000.00 ) = 3.954243

若要生成其他底数的对数,请使用数学关系:a 的 log 底数 b == 自然 log (a) / 自然 log (b)。

// logbase.cpp
#include <math.h>
#include <stdio.h>

double logbase(double a, double base)
{
   return log(a) / log(base);
}

int main()
{
   double x = 65536;
   double result;

   result = logbase(x, 2);
   printf("Log base 2 of %lf is %lf\n", x, result);
}
Log base 2 of 65536.000000 is 16.000000

另请参阅

数学和浮点支持
.- .
_matherr
.- .
_CIlog
_CIlog10\