logb, logbf, logbl
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
헤더 파일에 정의됨
<math.h>
|
||
|
float
logbf
(
float
arg
)
;
|
(1) | (C99부터) |
|
double
logb
(
double
arg
)
;
|
(2) | (C99부터) |
|
long
double
logbl
(
long
double
arg
)
;
|
(3) | (C99부터) |
|
헤더 파일에 정의됨
<tgmath.h>
|
||
|
#define logb( arg )
|
(4) | (C99부터) |
logbl
가 호출됩니다. 그렇지 않고
arg
가 정수 타입이나
double
타입을 가지면
logb
가 호출됩니다. 그 외의 경우에는
logbf
가 호출됩니다.
공식적으로, 비편향 지수는 0이 아닌
arg
에 대해
log
r
|arg|
의 부호 있는 정수 부분입니다(이 함수에서 부동 소수점 값으로 반환됨). 여기서
r
은
FLT_RADIX
입니다. 만약
arg
가 서브노멀(subnormal)인 경우, 정규화된 값처럼 처리됩니다.
목차 |
매개변수
| arg | - | 부동소수점 값 |
반환값
오류가 발생하지 않으면, arg 의 비편향 지수가 부동 소수점 값으로 반환됩니다.
도메인 오류가 발생하면 구현에서 정의한 값이 반환됩니다.
극점 오류가 발생하면,
-HUGE_VAL
,
-HUGE_VALF
, 또는
-HUGE_VALL
가 반환됩니다.
오류 처리
오류는
math_errhandling
에 명시된 대로 보고됩니다.
arg 가 0인 경우 도메인 또는 범위 오류가 발생할 수 있습니다.
구현이 IEEE 부동 소수점 연산(IEC 60559)을 지원하는 경우,
- 만약 arg 가 ±0이면, -∞가 반환되고 FE_DIVBYZERO 가 발생합니다.
- 만약 arg 가 ±∞이면, +∞가 반환됩니다.
- 만약 arg 가 NaN이면, NaN이 반환됩니다.
- 다른 모든 경우에는, 결과는 정확하며 ( FE_INEXACT 는 절대 발생하지 않음) 현재 반올림 모드 는 무시됩니다.
참고 사항
POSIX는 arg 가 ±0인 경우 극점 오류(pole error)가 발생하도록 요구합니다.
logb
가 반환하는 지수의 값은 항상
frexp
가 반환하는 지수보다
1
작습니다. 이는 서로 다른 정규화 요구사항 때문입니다:
logb
가 반환하는 지수
e
에 대해
|arg*r
-e
|
는
1
과
r
사이에 있습니다(일반적으로
1
과
2
사이). 그러나
frexp
가 반환하는 지수
e
에 대해
|arg*2
-e
|
는
0.5
과
1
사이에 있습니다.
예제
다양한 부동 소수점 분해 함수들을 비교합니다.
#include <fenv.h> #include <float.h> #include <math.h> #include <stdio.h> // #pragma STDC FENV_ACCESS ON int main(void) { double f = 123.45; printf("Given the number %.2f or %a in hex,\n", f, f); double f3; double f2 = modf(f, &f3); printf("modf() makes %.0f + %.2f\n", f3, f2); int i; f2 = frexp(f, &i); printf("frexp() makes %f * 2^%d\n", f2, i); i = logb(f); printf("logb()/logb() make %f * %d^%d\n", f/scalbn(1.0, i), FLT_RADIX, i); // error handling feclearexcept(FE_ALL_EXCEPT); printf("logb(0) = %f\n", logb(0)); if (fetestexcept(FE_DIVBYZERO)) puts(" FE_DIVBYZERO raised"); }
가능한 출력:
Given the number 123.45 or 0x1.edccccccccccdp+6 in hex,
modf() makes 123 + 0.45
frexp() makes 0.964453 * 2^7
logb()/logb() make 1.928906 * 2^6
logb(0) = -Inf
FE_DIVBYZERO raised
참고문헌
- C23 표준 (ISO/IEC 9899:2024):
-
- 7.12.6.11 logb 함수 (p: TBD)
-
- 7.25 타입-제네릭 수학 <tgmath.h> (p: TBD)
-
- F.10.3.11 logb 함수 (p: TBD)
- C17 표준 (ISO/IEC 9899:2018):
-
- 7.12.6.11 logb 함수 (p: 179-180)
-
- 7.25 타입-제네릭 수학 <tgmath.h> (p: 373-375)
-
- F.10.3.11 logb 함수 (p: 381)
- C11 표준 (ISO/IEC 9899:2011):
-
- 7.12.6.11 logb 함수 (p: 246)
-
- 7.25 타입-제네릭 수학 <tgmath.h> (p: 373-375)
-
- F.10.3.11 logb 함수 (p: 522)
- C99 표준 (ISO/IEC 9899:1999):
-
- 7.12.6.11 logb 함수 (p: 227)
-
- 7.22 유형-일반 수학 <tgmath.h> (p: 335-337)
-
- F.9.3.11 logb 함수 (p: 459)
참고 항목
|
(C99)
(C99)
|
숫자를 가수와 2의 거듭제곱으로 분해합니다
2
(함수) |
|
(C99)
(C99)
(C99)
|
주어진 숫자의 지수를 추출합니다
(함수) |
|
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
|
숫자에
FLT_RADIX
의 거듭제곱을 효율적으로 곱합니다
(함수) |
|
C++ documentation
for
logb
|
|