C言語編 標準ライブラリのリファレンス「L」

「L」で始まる標準ライブラリ関数及び、その他の定義です。

labs関数

概要 絶対値を返す。
ヘッダ stdlib.h
形式 long int labs(long int i);
引数 i 絶対値を求める対象の値。
戻り値 引数i の絶対値。
詳細
注意 結果が表現できない場合の動作は未定義。
使用例
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	printf( "%ld\n", labs(7L) );
	printf( "%ld\n", labs(-7L) );
	printf( "%ld\n", labs(0L) );

	return 0;
}

実行結果:

7
7
0
関連 引数と戻り値の型が異なるタイプが幾つか存在する。
abs関数は int型、llabs関数は long long int型を扱うが、後者は C99 から追加された。
また、double型を扱う fabs関数、float型を扱う fabsf関数、 long double型を扱う fabsl関数があるが、後ろの 2つは C99 から追加されたものである。 なお、これら浮動小数点数の型を扱うタイプは、stdlib.h ではなく、math.h に定義されている。
また、C99 で追加された intmax_t型の値に対して絶対値を求める imaxabs関数がある。
解説章

LC_ALL

概要 setlocale関数に指定する値で、ロケール全体を表す。
ヘッダ locale.h
形式 #define LC_ALL 0
置換結果 他の LC_ で始まる名称のマクロと異なる値になるが、 置換される値には特に意味は無い。
詳細 setlocale関数の第1引数に指定する値の1つで、 ロケール全体を対象にすることを意味する。
注意
使用例
#include <stdio.h>
#include <locale.h>

int main(void)
{
	setlocale( LC_ALL, "" );
	puts( setlocale( LC_ALL, NULL ) );

	return 0;
}

実行結果(VisualC++):

Japanese_Japan.932

実行結果(clang (Xcode)):

C
関連
解説章

LC_COLLATE

概要 setlocale関数に指定する値で、strcoll関数strxfrm関数の振る舞いに関するカテゴリを表す。
ヘッダ locale.h
形式 #define LC_COLLATE 1
置換結果 他の LC_ で始まる名称のマクロと異なる値になるが、 置換される値には特に意味は無い。
詳細 setlocale関数の第1引数に指定する値の1つで、 strcoll関数strxfrm関数の振る舞いに関するカテゴリを表す。
注意
使用例
#include <stdio.h>
#include <locale.h>

int main(void)
{
	setlocale( LC_COLLATE, "" );
	puts( setlocale( LC_COLLATE, NULL ) );

	return 0;
}

実行結果(VisualC++):

Japanese_Japan.932

実行結果(clang (Xcode)):

C
関連
解説章

LC_CTYPE

概要 setlocale関数に指定する値で、文字処理関数の動作に関するカテゴリを表す。
ヘッダ locale.h
形式 #define LC_CTYPE 2
置換結果 他の LC_ で始まる名称のマクロと異なる値になるが、 置換される値には特に意味は無い。
詳細 setlocale関数の第1引数に指定する値の1つで、 文字処理関数の動作に関するカテゴリを表す。 ctype.h や wctype.h の各種関数や、一部のマルチバイト文字関数、ワイド文字関数が影響を受ける。
注意
使用例
#include <stdio.h>
#include <locale.h>

int main(void)
{
	setlocale( LC_CTYPE, "" );
	puts( setlocale( LC_CTYPE, NULL ) );

	return 0;
}

実行結果(VisualC++):

Japanese_Japan.932

実行結果(clang (Xcode)):

C
関連
解説章

LC_MONETARY

概要 setlocale関数に指定する値で、localeconv関数が返す通貨情報に関するカテゴリを表す。
ヘッダ locale.h
形式 #define LC_MONETARY 3
置換結果 他の LC_ で始まる名称のマクロと異なる値になるが、 置換される値には特に意味は無い。
詳細 setlocale関数の第1引数に指定する値の1つで、 localeconv関数が返す通貨情報に関するカテゴリを表す。
注意
使用例
#include <stdio.h>
#include <locale.h>

int main(void)
{
	setlocale( LC_MONETARY, "" );
	puts( setlocale( LC_MONETARY, NULL ) );

	return 0;
}

実行結果(VisualC++):

Japanese_Japan.932

実行結果(clang (Xcode)):

C
関連 localeconv関数が返す通貨情報以外の情報については、 LC_NUMERIC を使う。
解説章

LC_NUMERIC

概要 setlocale関数に指定する値で、数値の表現方法に関するカテゴリを表す。
ヘッダ locale.h
形式 #define LC_NUMERIC 4
置換結果 他の LC_ で始まる名称のマクロと異なる値になるが、 置換される値には特に意味は無い。
詳細 setlocale関数の第1引数に指定する値の1つで、 数値の表現方法に関するカテゴリを表す。
書式付きの入出力関数や、文字列変換関数、localeconv関数が返す非通貨情報について影響を与える。
注意
使用例
#include <stdio.h>
#include <locale.h>

int main(void)
{
	setlocale( LC_NUMERIC, "" );
	puts( setlocale( LC_NUMERIC, NULL ) );

	return 0;
}

実行結果(VisualC++):

Japanese_Japan.932

実行結果(clang (Xcode)):

C
関連
解説章

LC_TIME

概要 setlocale関数に指定する値で、strftime関数の振る舞いに関するカテゴリを表す。
ヘッダ locale.h
形式 #define LC_TIME 5
置換結果 他の LC_ で始まる名称のマクロと異なる値になるが、 置換される値には特に意味は無い。
詳細 setlocale関数の第1引数に指定する値の1つで、 strftime関数の振る舞いに関するカテゴリを表す。
注意
使用例
#include <stdio.h>
#include <locale.h>

int main(void)
{
	setlocale( LC_TIME, "" );
	puts( setlocale( LC_TIME, NULL ) );

	return 0;
}

実行結果(VisualC++):

Japanese_Japan.932

実行結果(clang (Xcode)):

C
関連
解説章

lconv

概要 数値と通貨を書式化することに関する情報を集めた型。
ヘッダ locale.h
形式
struct lconv {
	char *decimal_point;
	char *thousands_sep;
	char *grouping;
	char *int_curr_symbol;
	char *currency_symbol;
	char *mon_decimal_point;
	char *mon_thousands_sep;
	char *mon_grouping;
	char *positive_sign;
	char *negative_sign;
	char int_frac_digits;
	char frac_digits;
	char p_cs_precedes;
	char p_sep_by_space;
	char n_cs_precedes;
	char n_sep_by_space;
	char p_sign_posn;
	char n_sign_posn;
};
	
詳細 「形式」に挙げたメンバは、標準で必ず持つことが定められているが、 これら以外にもメンバを持つ可能性がある。 各メンバの意味は次の通り。
メンバ 意味
decimal_point 金額以外に使う、小数点文字
thousands_sep 金額以外に使う、数字群分離文字
grouping 金額以外に使う、数字群桁数
int_curr_symbol 国際通貨記号と金額を分離する文字
currency_symbol 現在のロケールのための地域的通貨記号
mon_decimal_point 金額用の小数点文字
mon_thousands_sep 金額用の数字群分離文字
mon_grouping 金額用の数字群桁数
positive_sign 金額の正の符号文字
negative_sign 金額の負の符号文字
int_frac_digits 国際金額書式のための小数部の桁数
frac_digits 国際金額書式以外のための小数部の桁数
p_cs_precedes 通貨記号が、負でない金額の手前に付くなら 1、後に付くなら 0
p_sep_by_space 通貨記号と、負でない金額の間に空白があれば 1、なければ 0
n_cs_precedes 通貨記号が、負の金額の手前に付くなら 1、なければ 0
n_sep_by_space 通貨記号と、負の金額の間に空白があれば 1、なければ 0
p_sign_posn 負でない金額と currency_symbol に対する positive_sign の位置
n_sign_posn 負の金額と currency_symbol に対する negative_sign の位置
型が char* のメンバについては ""、char型のメンバについては CHAR_MAX であるとき、 そのメンバについては、値が与えられていないことを意味する。
注意
使用例
#include <stdio.h>
#include <locale.h>

static void PrintLconv();

int main(void)
{
	PrintLconv();

#if defined(_MSC_VER)
	setlocale( LC_ALL, "spanish" );
#elif defined(__clang__)
	setlocale( LC_ALL, "es_ES" );
#endif
	PrintLconv();

	return 0;
}

void PrintLconv()
{
	const struct lconv* lc = localeconv();

	printf( "--- %s ---\n", setlocale( LC_ALL, NULL ) );

	printf( "decimal_point == %s\n", lc->decimal_point );
	printf( "thousands_sep == %s\n", lc->thousands_sep );
	printf( "grouping == %s\n", lc->grouping );
	printf( "int_curr_symbol == %s\n", lc->int_curr_symbol );
	printf( "currency_symbol == %s\n", lc->currency_symbol );
	printf( "mon_decimal_point == %s\n", lc->mon_decimal_point );
	printf( "mon_thousands_sep == %s\n", lc->mon_thousands_sep );
	printf( "mon_grouping == %s\n", lc->mon_grouping );
	printf( "positive_sign == %s\n", lc->positive_sign );
	printf( "negative_sign == %s\n", lc->negative_sign );
	printf( "int_frac_digits == %c\n", lc->int_frac_digits );
	printf( "frac_digits == %c\n", lc->frac_digits );
	printf( "p_cs_precedes == %c\n", lc->p_cs_precedes );
	printf( "p_sep_by_space == %c\n", lc->p_sep_by_space );
	printf( "n_cs_precedes == %c\n", lc->n_cs_precedes );
	printf( "n_sep_by_space == %c\n", lc->n_sep_by_space );
	printf( "p_sign_posn == %c\n", lc->p_sign_posn );
	printf( "n_sign_posn == %c\n", lc->n_sign_posn );

	printf( "\n\n" );
}

実行結果 (VisualC++):

--- C ---
decimal_point == .
thousands_sep ==
grouping ==
int_curr_symbol ==
currency_symbol ==
mon_decimal_point ==
mon_thousands_sep ==
mon_grouping ==
positive_sign ==
negative_sign ==
int_frac_digits == 
frac_digits == 
p_cs_precedes == 
p_sep_by_space == 
n_cs_precedes == 
n_sep_by_space == 
p_sign_posn == 
n_sign_posn == 


--- Spanish_Spain.1252 ---
decimal_point == ,
thousands_sep == .
grouping == 
int_curr_symbol == EUR
currency_symbol == ?
mon_decimal_point == ,
mon_thousands_sep == .
mon_grouping == 
positive_sign ==
negative_sign == -
int_frac_digits == 
frac_digits == 
p_cs_precedes == 

実行結果 (clang(Xcode)):

--- C ---
decimal_point == .
thousands_sep == 
grouping == 
int_curr_symbol == 
currency_symbol == 
mon_decimal_point == 
mon_thousands_sep == 
mon_grouping == 
positive_sign == 
negative_sign == 
int_frac_digits == 
frac_digits == 
p_cs_precedes == 
p_sep_by_space == 
n_cs_precedes == 
n_sep_by_space == 
p_sign_posn == 
n_sign_posn == 


--- es_ES ---
decimal_point == ,
thousands_sep == 
grouping == 
int_curr_symbol == EUR 
currency_symbol == Eu
mon_decimal_point == ,
mon_thousands_sep == .
mon_grouping == 
positive_sign == 
negative_sign == -
int_frac_digits == 
frac_digits == 
p_cs_precedes == 
p_sep_by_space == 
n_cs_precedes == 
n_sep_by_space == 
p_sign_posn == 
n_sign_posn == 
関連 lconv構造体の値は、localeconv関数が返すポインタを経由して得られる。
解説章

LDBL_MAX

概要 long double型で表現可能な最大の数。
ヘッダ float.h
形式 #define LDBL_MAX 1.7976931348623158e+308
置換結果 long double型で表現可能な最大の数。
詳細
注意 long double型で表現できる一番小さい値は、-LDBL_MAX である。 LDBL_MIN は、一番小さい正数を表している。
使用例
#include <stdio.h>
#include <float.h>

int main(void)
{
	printf( "%e\n", LDBL_MAX );

	return 0;
}

実行結果:

1.797693e+308
関連 LDBL_MIN は、long double型で表現できる一番小さい正数を表す。
解説章 第20章

LDBL_MIN

概要 long double型で表現可能な最小な正数。
ヘッダ float.h
形式 #define LDBL_MIN 2.2250738585072014e-308
置換結果 long double型で表現可能な最小な正数。
詳細 long double型で表現することができる最も小さい正の数を表している。 言い換えると、最も 0 に近い正数である。
注意 この記号定数は、負数にはならないので、long double型の最小値を表してはいない。 最小値が必要ならば、-LDBL_MAX を使う。
使用例
#include <stdio.h>
#include <float.h>

int main(void)
{
	printf( "%e\n", LDBL_MIN );

	return 0;
}

実行結果:

2.225074e-308
関連 long double型の最大値は LDBL_MAX を調べる。
解説章

llabs関数

概要 絶対値を返す。
ヘッダ stdlib.h
形式 long long int llabs(long long int i);
引数 i 絶対値を求める対象の値。
戻り値 引数i の絶対値。
詳細
注意 結果が表現できない場合の動作は未定義。
使用例
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	printf( "%lld\n", llabs(7LL) );
	printf( "%lld\n", llabs(-7LL) );
	printf( "%lld\n", llabs(0LL) );

	return 0;
}

実行結果:

7
7
0
関連 引数と戻り値の型が異なるタイプが幾つか存在する。
abs関数は int型、labs関数は long int型を扱う。
また、double型を扱う fabs関数、float型を扱う fabsf関数、 long double型を扱う fabsl関数があるが、後ろの 2つは C99 から追加されたものである。 なお、これら浮動小数点数の型を扱うタイプは、stdlib.h ではなく、math.h に定義されている。
また、C99 で追加された intmax_t型の値に対して絶対値を求める imaxabs関数がある。
解説章

LLONG_MAX

概要 long long型で表現可能な最大の数。
ヘッダ limits.h
形式 #define LLONG_MAX 9223372036854775807LL
置換結果 long long型で表現可能な最大の数。
詳細
注意 long long型の大きさはコンパイラ依存であるが、最低でも 64bit である。
使用例
#include <stdio.h>
#include <limits.h>

int main(void)
{
	printf( "%lld\n", LLONG_MAX );

	return 0;
}

実行結果:

9223372036854775807
関連 long long型の最小値は LLONG_MIN で表される。
unsigned long long型の最小値は 0、最大値は ULLONG_MAX で表される。
解説章

LLONG_MIN

概要 long long型で表現可能な最小の数。
ヘッダ limits.h
形式 #define LLONG_MIN -9223372036854775807LL
置換結果 long long型で表現可能な最小の数。
詳細
注意 long long型の大きさはコンパイラ依存であるが、最低でも 64bit である。
使用例
#include <stdio.h>
#include <limits.h>

int main(void)
{
	printf( "%lld\n", LLONG_MIN );

	return 0;
}

実行結果:

-9223372036854775808
関連 long long型の最大値は LLONG_MAX で表される。
unsigned long long型の最小値は 0、最大値は ULLONG_MAX で表される。
解説章

localeconv関数

概要 数値や通貨の書式化に関する情報を取得する。
ヘッダ locale.h
形式 struct lconv* localeconv(void);
引数 なし
戻り値 現在のロケールにおける数値や通貨の書式化に関する情報。
詳細
注意 返されたポインタが指す lconv構造体のメンバは書き換えてはならない。 また、次回の localeconv関数の呼び出しによって、書き換えられる可能性がある。
使用例
#include <stdio.h>
#include <locale.h>

static void PrintRealNum(int integer, int fraction, int fract_part);

int main(void)
{
	puts( setlocale( LC_NUMERIC, "" ) );
	PrintRealNum( 10, 25, 3 );

#if defined(_MSC_VER)
	puts( setlocale( LC_NUMERIC, "spanish" ) );
#elif defined(__clang__)
	puts( setlocale( LC_NUMERIC, "es_ES" ) );
#endif
	PrintRealNum( 10, 25, 3 );

	return 0;
}

void PrintRealNum(int integer, int fraction, int fract_part)
{
	const char* decimal_point = localeconv()->decimal_point;
	if( decimal_point[0] == '\0' ){
		decimal_point = ".";
	}

	printf(
		"%d%s%0*d\n",
		integer,
		decimal_point,
		fract_part,
		fraction
	);
}

実行結果 (VisualC++):

Japanese_Japan.932
10.025
Spanish_Spain.1252
10,025

実行結果 (clang (Xcode)):

C
10.025
es_ES
10,025
関連 返却されるポインタが指す型である lconv構造体の内容は、 setlocale関数による、LC_MONETARYLC_NUMERIC カテゴリの変更によって影響を受ける。
解説章

localtime関数

概要 カレンダー時間から、ローカル時間を得る。
ヘッダ time.h
形式 struct tm* localtime(const time_t* t);
引数 t カレンダー時間が格納されているアドレス。
戻り値 ローカル時間が格納された位置を指すポインタが返される。 失敗した場合は NULL が返される。
詳細
注意 返されるポインタが指す先は、次回の localtime関数の呼び出し時に再利用され、上書きされる可能性がある。 この関数だけでなく、ctime関数gmtime関数でも、同じ場所を上書きしている可能性がある。
使用例
#include <stdio.h>
#include <time.h>

int main(void)
{
	struct tm* lt;
	time_t t;
	
	t = time( NULL );
	lt = localtime( &t );

	puts( asctime( lt ) );

	return 0;
}

実行結果

Sun Apr 03 13:07:27 2011
関連 カレンダー時間から、協定世界時(UTC) を得るには gmtime関数を使う。
解説章 第51章

log関数

概要 自然対数を求める
ヘッダ math.h
形式 double log(double x);
引数 x 対象の値。
戻り値 引数x の自然対数。
詳細 e (ネイピア数)を底とする対数(自然対数)を求める。
注意 引数x が負数の場合は定義域エラーになり、errnoEDOM がセットされる。 この場合の戻り値は、環境依存となる。
引数x が 0 の場合は範囲エラーになり、戻り値は 0 になる。 この場合に、errnoERANGE がセットされるかどうかは環境依存である。
使用例
#include <stdio.h>
#include <math.h>

int main(void)
{
	double x = 1.0 / 16.0;
	int i;

	for( i = 0; i < 8; ++i ){
		printf( "log(%.4f) = %f\n", x, log(x) );
		x *= 2.0;
	}

	return 0;
}

実行結果

log(0.0625) = -2.772589
log(0.1250) = -2.079442
log(0.2500) = -1.386294
log(0.5000) = -0.693147
log(1.0000) = 0.000000
log(2.0000) = 0.693147
log(4.0000) = 1.386294
log(8.0000) = 2.079442
関連 常用対数を求める log10関数がある。 また、自然対数の底e の x乗を計算するには exp関数を使う。
C99 では、float型版の logf関数、long double型版の logl関数が追加されている。
解説章

log10関数

概要 常用対数を求める
ヘッダ math.h
形式 double log10(double x);
引数 x 対象の値。
戻り値 引数x の常用対数。
詳細 10 を底とする対数(常用対数)を求める。
注意 引数x が負数の場合は定義域エラーになり、errnoEDOM がセットされる。 この場合の戻り値は、環境依存となる。
引数x が 0 の場合は範囲エラーになり、戻り値は 0 になる。 この場合に、errnoERANGE がセットされるかどうかは環境依存である。
使用例
#include <stdio.h>
#include <math.h>

int main(void)
{
	double x = 1.0 / 100.0;
	int i;

	for( i = 0; i < 8; ++i ){
		printf( "log10(%6.7g) = %f\n", x, log10(x) );
		x *= 10.0;
	}

	return 0;
}

実行結果

log10(  0.01) = -2.000000
log10(   0.1) = -1.000000
log10(     1) = 0.000000
log10(    10) = 1.000000
log10(   100) = 2.000000
log10(  1000) = 3.000000
log10( 10000) = 4.000000
log10(100000) = 5.000000
関連 自然対数を求める log関数がある。
C99 では、float型版の log10f関数、long double型版の log10l関数が追加されている。
解説章

log10f関数

概要 常用対数を求める
ヘッダ math.h
形式 float log10(float x);
引数 x 対象の値。
戻り値 引数x の常用対数。
詳細 10 を底とする対数(常用対数)を求める。
注意 引数x が負数の場合は定義域エラーになり、errnoEDOM がセットされる。 この場合の戻り値は、環境依存となる。
引数x が 0 の場合は範囲エラーになり、戻り値は 0 になる。 この場合に、errnoERANGE がセットされるかどうかは環境依存である。
使用例
#include <stdio.h>
#include <math.h>

int main(void)
{
	int x, i;
	float xf;

	for( i = 0; i < 8; ++i ){
		x = (int)pow(10, i);
		xf = x / 100.0f;
		printf( "log10(%6.7g) = %f\n", xf, log10f(xf) );
	}

	return 0;
}

実行結果

log10(  0.01) = -2.000000
log10(   0.1) = -1.000000
log10(     1) = 0.000000
log10(    10) = 1.000000
log10(   100) = 2.000000
log10(  1000) = 3.000000
log10( 10000) = 4.000000
log10(100000) = 5.000000
関連 自然対数を求める logf関数がある。
double型版は log10関数、long double型版は log10l関数である。
解説章

log10l関数

概要 常用対数を求める
ヘッダ math.h
形式 long double log10l(long double x);
引数 x 対象の値。
戻り値 引数x の常用対数。
詳細 10 を底とする対数(常用対数)を求める。
注意 引数x が負数の場合は定義域エラーになり、errnoEDOM がセットされる。 この場合の戻り値は、環境依存となる。
引数x が 0 の場合は範囲エラーになり、戻り値は 0 になる。 この場合に、errnoERANGE がセットされるかどうかは環境依存である。
使用例
#include <stdio.h>
#include <math.h>

int main(void)
{
	long double x = 1.0L / 100.0L;
	int i;

	for( i = 0; i < 8; ++i ){
		printf( "log10(%6.7Lg) = %Lf\n", x, log10l(x) );
		x *= 10.0L;
	}

	return 0;
}

実行結果

log10(  0.01) = -2.000000
log10(   0.1) = -1.000000
log10(     1) = 0.000000
log10(    10) = 1.000000
log10(   100) = 2.000000
log10(  1000) = 3.000000
log10( 10000) = 4.000000
log10(100000) = 5.000000
関連 自然対数を求める logl関数がある。
float型版は log10f関数、double型版は log10関数である。
解説章

log2関数

概要 2 を底とする対数を求める
ヘッダ math.h
形式 double log2(double x);
引数 x 対象の値。
戻り値 引数x の 2 を定数とする対数。
詳細 2 を底とする対数を求める。
注意 引数x が負数の場合は定義域エラーになり、errnoEDOM がセットされる。 この場合の戻り値は、環境依存となる。
引数x が 0 の場合は範囲エラーになり、戻り値は 0 になる。 この場合に、errnoERANGE がセットされるかどうかは環境依存である。
使用例
#include <stdio.h>
#include <math.h>

int main(void)
{
	double x = 1.0 / 16.0;
	int i;

	for( i = 0; i < 8; ++i ){
		printf( "log2(%6.7g) = %f\n", x, log2(x) );
		x *= 2.0;
	}

	return 0;
}

実行結果

log2(0.0625) = -4.000000
log2( 0.125) = -3.000000
log2(  0.25) = -2.000000
log2(   0.5) = -1.000000
log2(     1) = 0.000000
log2(     2) = 1.000000
log2(     4) = 2.000000
log2(     8) = 3.000000
関連 float型版の log2f関数、long double型版の log2l関数がある。
また、自然対数を求める log関数、 常用対数を求める log10関数がある。
解説章

log2f関数

概要 2 を底とする対数を求める
ヘッダ math.h
形式 float log2f(float x);
引数 x 対象の値。
戻り値 引数x の 2 を定数とする対数。
詳細 2 を底とする対数を求める。
注意 引数x が負数の場合は定義域エラーになり、errnoEDOM がセットされる。 この場合の戻り値は、環境依存となる。
引数x が 0 の場合は範囲エラーになり、戻り値は 0 になる。 この場合に、errnoERANGE がセットされるかどうかは環境依存である。
使用例
#include <stdio.h>
#include <math.h>

int main(void)
{
	float x = 1.0f / 16.0f;
	int i;

	for( i = 0; i < 8; ++i ){
		printf( "log2(%6.7g) = %f\n", x, log2f(x) );
		x *= 2.0f;
	}

	return 0;
}

実行結果

log2(0.0625) = -4.000000
log2( 0.125) = -3.000000
log2(  0.25) = -2.000000
log2(   0.5) = -1.000000
log2(     1) = 0.000000
log2(     2) = 1.000000
log2(     4) = 2.000000
log2(     8) = 3.000000
関連 double型版の log2関数、long double型版の log2l関数がある。
また、自然対数を求める logf関数、 常用対数を求める log10f関数がある。
解説章

log2l関数

概要 2 を底とする対数を求める
ヘッダ math.h
形式 long double log2l(long double x);
引数 x 対象の値。
戻り値 引数x の 2 を定数とする対数。
詳細 2 を底とする対数を求める。
注意 引数x が負数の場合は定義域エラーになり、errnoEDOM がセットされる。 この場合の戻り値は、環境依存となる。
引数x が 0 の場合は範囲エラーになり、戻り値は 0 になる。 この場合に、errnoERANGE がセットされるかどうかは環境依存である。
使用例
#include <stdio.h>
#include <math.h>

int main(void)
{
	long double x = 1.0L / 16.0L;
	int i;

	for( i = 0; i < 8; ++i ){
		printf( "log2(%6.7Lg) = %Lf\n", x, log2l(x) );
		x *= 2.0L;
	}

	return 0;
}

実行結果

log2(0.0625) = -4.000000
log2( 0.125) = -3.000000
log2(  0.25) = -2.000000
log2(   0.5) = -1.000000
log2(     1) = 0.000000
log2(     2) = 1.000000
log2(     4) = 2.000000
log2(     8) = 3.000000
関連 float型版の log2f関数、double型版の log2関数がある。
また、自然対数を求める logl関数、 常用対数を求める log10l関数がある。
解説章

logf関数

概要 自然対数を求める
ヘッダ math.h
形式 float logf(float x);
引数 x 対象の値。
戻り値 引数x の自然対数。
詳細 e (ネイピア数)を底とする対数(自然対数)を求める。
注意 引数x が負数の場合は定義域エラーになり、errnoEDOM がセットされる。 この場合の戻り値は、環境依存となる。
引数x が 0 の場合は範囲エラーになり、戻り値は 0 になる。 この場合に、errnoERANGE がセットされるかどうかは環境依存である。
使用例
#include <stdio.h>
#include <math.h>

int main(void)
{
	float x = 1.0f / 16.0f;
	int i;

	for( i = 0; i < 8; ++i ){
		printf( "log(%.4f) = %f\n", x, logf(x) );
		x *= 2.0f;
	}

	return 0;
}

実行結果

log(0.0625) = -2.772589
log(0.1250) = -2.079442
log(0.2500) = -1.386294
log(0.5000) = -0.693147
log(1.0000) = 0.000000
log(2.0000) = 0.693147
log(4.0000) = 1.386294
log(8.0000) = 2.079442
関連 常用対数を求める log10f関数がある。 また、自然対数の底e の x乗を計算するには expf関数を使う。
double型版は log関数、long double型版は logl関数である。
解説章

logl関数

概要 自然対数を求める
ヘッダ math.h
形式 long double logl(long double x);
引数 x 対象の値。
戻り値 引数x の自然対数。
詳細 e (ネイピア数)を底とする対数(自然対数)を求める。
注意 引数x が負数の場合は定義域エラーになり、errnoEDOM がセットされる。 この場合の戻り値は、環境依存となる。
引数x が 0 の場合は範囲エラーになり、戻り値は 0 になる。 この場合に、errnoERANGE がセットされるかどうかは環境依存である。
使用例
#include <stdio.h>
#include <math.h>

int main(void)
{
	long double x = 1.0L / 16.0L;
	int i;

	for( i = 0; i < 8; ++i ){
		printf( "log(%.4Lf) = %Lf\n", x, logl(x) );
		x *= 2.0L;
	}

	return 0;
}

実行結果

log(0.0625) = -2.772589
log(0.1250) = -2.079442
log(0.2500) = -1.386294
log(0.5000) = -0.693147
log(1.0000) = 0.000000
log(2.0000) = 0.693147
log(4.0000) = 1.386294
log(8.0000) = 2.079442
関連 常用対数を求める log10l関数がある。 また、自然対数の底e の x乗を計算するには expl関数を使う。
float型版は logf関数、double型版は log関数である。
解説章

LONG_MAX

概要 long型で表現可能な最大の数。
ヘッダ limits.h
形式 #define LONG_MAX 2147483647L
置換結果 long型で表現可能な最大の数。
詳細
注意 long型の大きさはコンパイラ依存であるが、最低でも 32bit である。
使用例
#include <stdio.h>
#include <limits.h>

int main(void)
{
	printf( "%ld\n", LONG_MAX );

	return 0;
}

実行結果:

2147483647
関連 long型の最小値は LONG_MIN で表される。
unsigned long型の最小値は 0、最大値は ULONG_MAX で表される。
解説章 第20章

LONG_MIN

概要 long型で表現可能な最小の数。
ヘッダ limits.h
形式 #define LONG_MIN -2147483648L
置換結果 long型で表現可能な最小の数。
詳細
注意 long型の大きさはコンパイラ依存であるが、最低でも 32bit である。
使用例
#include <stdio.h>
#include <limits.h>

int main(void)
{
	printf( "%ld\n", LONG_MIN );

	return 0;
}

実行結果:

-2147483648
関連 long型の最大値は LONG_MAX で表される。
unsigned long型の最小値は 0、最大値は ULONG_MAX で表される。
解説章 第20章

L_tmpnam

概要 tmpnam関数が生成するファイル名を保持するために必要な配列の大きさを表す。
ヘッダ stdio.h
形式 #define L_tmpnam 13
置換結果 tmpnam関数が生成するファイル名を保持するために必要な配列の大きさ。
詳細 他の多くのオブジェクト形式マクロと異なり、名前に小文字が含まれるが、マクロである。
注意
使用例
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	char fname[L_tmpnam];
	
	if( tmpnam( fname ) == NULL ){
		fputs( "ファイル名の生成に失敗。", stderr );
		exit( EXIT_FAILURE );
	}

	puts( fname );

	return 0;
}

実行結果:

\s9g.
関連
解説章

参考リンク

Cクイックリファレンス 第2版
 -- C11対応のリファレンス。
S・P・ハービソン3世とG・L・スティール・ジュニアのCリファレンスマニュアル 第5版
 -- C99 まで網羅した最も詳細なリファレンス。
新ANSI C言語辞典
 -- 標準ライブラリについて詳しい。C99 には非対応。

更新履歴

'2017/5/19 log2関数、log2f関数、log2l関数の説明を追加。

'2017/5/14 localeconv関数、lconv の説明を追加。

'2017/5/4 LC_ALL、LC_COLLATE、LC_CTYPE、LC_MONETARY、LC_NUMERIC、LC_TIME の説明を追加。

'2017/4/12 logf関数、logl関数、log10f関数、log10l関数の説明を追加。

'2017/3/16 LLONG_MAXマクロ、LLONG_MINマクロの説明を追加。

'2017/3/4 llabs関数の説明を追加。labs関数の説明を修正。

'2011/6/4 log関数、log10関数の説明を追加。

'2011/5/5 localtime関数の説明を追加。

'2010/5/15 L_tmpnam の説明を追加。

'2009/12/17 LONG_MAX、LONG_MIN の説明を追加。

'2009/11/28 LDBL_MAX、LDBL_MIN の説明を追加。

'2009/9/19 labs関数の説明を追加。

'2009/6/24 新規作成。



標準ライブラリのリファレンスのトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ