C 수학 함수

C mathematical functions

C 수학 연산은 기본 수학 [1][2]함수를 구현하는 C 프로그래밍 언어의 표준 라이브러리의 함수 그룹입니다.모든 함수는 부동소수점 숫자를 사용합니다.서로 다른 C 표준은 서로 다른 기능 세트를 제공하지만 하위 호환성이 있습니다.이러한 기능의 대부분은 C++ 표준 라이브러리에서도 사용할 수 있습니다.다만, 다른 헤더(C 헤더도 포함되어 있습니다만, 권장되지 않는 호환성 기능으로 한정됩니다).

기능의 개요

대부분의 수학적 함수는 다음과 같이 정의됩니다.<math.h>(<cmath>헤더(C++)를 지정합니다.다음과 같은 정수에서 작동하는 함수abs,labs,div,그리고.ldiv대신 에 정의되어 있습니다.<stdlib.h>헤더 (<cstdlib>헤더(C++)를 지정합니다.

각도에서 작동하는 모든 기능은 라디안[1]각도 단위로 사용합니다.

모든 기능을 표준의 C89 버전에서 사용할 수 있는 것은 아닙니다.즉, 함수는 유형만 받아들입니다.double부동소수점 인수의 경우 코드에서 고가의 유형 변환이 이루어지며, 그렇지 않으면 단일 문자를 사용합니다.float가치.C99 에서는, 이 단점은, 동작하는 새로운 기능 세트를 도입하는 것으로 수정되었습니다.float그리고.long double논쟁들.이러한 기능은 다음과 같이 식별됩니다.f그리고.l각각 접미사를 붙입니다.[3]

기능. 묘사
abs
labs
llabs
정수값의 절대값을 계산합니다.
fabs 부동소수점 값의 절대값을 계산합니다.
div
ldiv
lldiv
정수 나눗셈의 몫과 나머지를 계산합니다.
fmod 부동 소수점 분할 연산의 나머지 부분
remainder 분할 작업의 나머지 부분 서명
remquo 분할 연산의 마지막 3비트뿐만 아니라 부호화된 나머지
fma 용융 곱셈 연산
fmax 2개의 부동소수점 값 중 큰 값
fmin 2개의 부동 소수점 값 중 작은 값
fdim 두 부동 소수점 값의 양의 차이
nan
nanf
nanl
NaN을 반환한다(not-a-number).
지수
기능들
exp e를 지정된 거듭제곱으로 되돌립니다.
exp2 2를 지정한 거듭제곱으로 되돌립니다.
expm1 e를 지정된 거듭제곱으로 되돌립니다(-1).
log 자연 로그를 계산합니다(기본값 e로).
log2 이진 로그를 계산합니다(기본값 2로).
log10 공통 로그를 계산합니다(밑수 10).
log1p 자연 로그(기본값 e에 대한)에 1을 더한 값을 계산합니다.
ilogb 그 숫자의 지수 추출
logb 그 숫자의 지수 추출

기능들
sqrt 제곱근을 계산하다
cbrt 입방근 계산
hypot 주어진숫자의 제곱합에 대한 제곱근을 계산한다
pow 소정의[4] 거듭제곱으로 수를 늘리다
삼각법
기능들
sin 사인파 계산
cos 코사인 계산
tan 탄젠트를 계산하다
asin 아크 사인 계산
acos 호 코사인 계산
atan 접선을 계산합니다.
atan2 기호를 사용하여 사분원을 결정하는 호 접선 계산
쌍곡선
기능들
sinh 쌍곡선 사인 계산
cosh 쌍곡 코사인 계산
tanh 쌍곡선 접선을 계산합니다.
asinh 쌍곡선 아크 사인 계산
acosh 쌍곡선 호 코사인 계산
atanh 쌍곡선 호 접선을 계산합니다.
에러와
감마
기능들
erf 에러 함수를 계산합니다.
erfc 보완 오차 함수를 계산하다
lgamma 감마 함수의 절대값의 자연 로그를 계산합니다.
tgamma 감마 함수를 계산합니다.
가장 가까운
정수
플로팅
지점
조작
ceil 지정된 값 이상의 가장 가까운 정수를 반환합니다.
floor 지정된 값 이하의 가장 가까운 정수를 반환합니다.
trunc 지정된 값보다 크지 않은 가장 가까운 정수를 반환합니다.
round
lround
llround
가장 가까운 정수를 반환하고 중간인 경우 0에서 반올림합니다.
nearbyint 현재 반올림 모드를 사용하여 가장 가까운 정수를 반환합니다.
rint
lrint
llrint
결과가 다를 경우 예외적으로 현재 반올림 모드를 사용하여 가장 가까운 정수를 반환합니다.
플로팅
지점
조작
기능들
frexp 숫자를 유의와 2의 거듭제곱으로 분해한다.
ldexp 2를 곱하여 거듭제곱하다
modf 숫자를 정수와 소수 부분으로 분해하다
scalbn
scalbln
곱셈에 FLT_RADIX를 곱한다.
nextafter
nexttoward
지정된 값으로 다음 대표 부동소수점 값을 반환합니다.
copysign 부동 소수점 값의 부호를 복사합니다.
분류 fpclassify 지정된 부동소수점 값을 분류합니다.
isfinite 인수의 값이 유한한지 여부를 확인합니다.
isinf 인수가 무한인지 아닌지를 확인합니다.
isnan 인수가 NaN인지 아닌지를 확인합니다.
isnormal 인수가 정상인지 확인합니다.
signbit 인수 부호가 음수인지 확인합니다.

부동소수점 환경

C99는 부동소수점 [3]환경의 세분화된 제어를 위한 몇 가지 기능과 유형을 추가합니다.이러한 함수를 사용하여 반올림 모드 등 부동 소수점 계산에 영향을 미치는 다양한 설정을 제어할 수 있습니다. 예를 들어, 어떤 예외 상황이 발생하는지, 숫자가 0으로 플러시되는 경우 등에 사용할 수 있습니다.부동소수점 환경기능 및 유형은 에 정의되어 있습니다.<fenv.h>헤더 (<cfenv>C++)로 설정합니다.

기능. 묘사
feclearexcept 예외 클리어(C99)
fegetenv 현재 부동소수점 환경(C99)을 저장합니다.
fegetexceptflag 현재 상태 플래그(C99)를 저장합니다.
fegetround 현재 반올림 방향(C99)을 검색합니다.
feholdexcept 현재 부동소수점 환경을 저장하고 모든 예외를 삭제합니다(C99)
feraiseexcept 부동소수점 예외 발생(C99)
fesetenv 현재의 부동소수점 환경을 설정합니다(C99)
fesetexceptflag 현재 상태 플래그 설정(C99)
fesetround 전류 반올림 방향 설정(C99)
fetestexcept 특정 예외가 발생했는지 여부를 테스트합니다(C99)
feupdateenv 는 부동소수점 환경을 복원하지만 현재 예외를 유지합니다(C99)

복소수

C99에 새로운 기능이 추가되었습니다._Complex키워드(및complex컴비니언스 매크로)를 사용하여 복소수를 지원합니다.부동소수점 유형은 다음과 같이 수정할 수 있습니다.complex는 부동소수점 번호의 쌍으로 정의됩니다.C99와 C++는 복잡한 번호를 코드 호환 방식으로 구현하지 않으며, 대신 C99와 C++가 클래스를 제공합니다.std::complex.

복잡한 숫자에 대한 모든 연산은 에 정의되어 있습니다.<complex.h>header를 클릭합니다.실제값 함수와 마찬가지로f또는l접미사는float complex또는long double complex기능의 바리안트.

기능. 묘사
기본의
조작
cabs 절대값을 계산합니다(C99)
carg 복소수의 인수를 계산합니다(C99)
cimag 복소수의 허수 부분을 계산합니다(C99)
creal 복소수의 실제 부분을 계산합니다(C99)
conj 복잡한 켤레를 계산합니다(C99)
cproj 리만 구(C99)에 대한 복잡한 투영을 계산합니다.
지수화
조작
cexp 복잡한 지수 계산(C99)
clog 복잡한 로그를 계산합니다(C99)
csqrt 복소수 제곱근(C99)을 계산합니다.
cpow 복잡한 전력을 계산한다(C99)
삼각법
조작
csin 복잡한 사인(C99)을 계산합니다.
ccos 복잡한 코사인(C99)을 계산합니다.
ctan 복잡한 접선을 계산합니다(C99)
casin 복잡한 아크 사인(C99)을 계산합니다.
cacos 복소호 코사인(C99)을 계산합니다.
catan 복잡한접선을 계산합니다(C99)
쌍곡선
조작
csinh 복잡한 쌍곡선 사인(C99)을 계산합니다.
ccosh 복잡한 쌍곡선 코사인(C99)을 계산합니다.
ctanh 복잡한 쌍곡선 탄젠트를 계산합니다(C99)
casinh 복잡한 쌍곡선 아크 사인(C99)을 계산합니다.
cacosh 복잡한 쌍곡선코사인(C99)을 계산합니다.
catanh 복잡한 쌍곡선 호 접선(C99)을 계산합니다.

몇 가지 더 복잡한 기능은 "향후 [5]C99에서 사용하기 위해 예약"되어 있습니다.구현은 표준 라이브러리의 일부가 아닌 오픈 소스 프로젝트에서 제공됩니다.

기능. 묘사
오류 함수 cerf 복잡한 에러 함수(C99)를 계산합니다.
cerfc 복잡한 보완 오류 함수(C99)를 계산합니다.

유형 일반 함수

머리글<tgmath.h>에 정의되어 있는 각 수학적 함수에 대해 활자 변환 매크로를 정의합니다.<math.h>그리고.<complex.h>수학 함수의 함수 오버로드에 대한 제한된 지원이 추가됩니다. 동일한 함수 이름을 다른 유형의 파라미터와 함께 사용할 수 있습니다. 실제 함수는 파라미터의 유형에 따라 컴파일 시 선택됩니다.

실수와 복소수 양쪽에 정의되어 있는 함수에 대응하는 각 타입 제네릭매크로에는 총 6개의 다른 함수가 캡슐화되어 있습니다.float,double그리고.long double, 및 그complex변종입니다.실수에 대해서만 정의되어 있는 함수에 대응하는 타입 제네릭매크로에는 총 3개의 다른 함수가 캡슐화되어 있습니다.float,double그리고.long double기능의 변형입니다.

C++ 언어에는 함수 오버로드에 대한 네이티브 지원이 포함되어 있기 때문에 C++ 언어에는<tgmath.h>호환성 기능으로도 사용할 수 있습니다.

난수생성

머리글<stdlib.h>(<cstdlib>C++)에서는 통계적으로 난수 생성에 [6]사용할 수 있는 몇 가지 함수를 정의합니다.

기능. 묘사
rand 0에서 0 사이의 의사 소숫자를 생성합니다.RAND_MAX, 포함.
srand 유사 주파수 생성기를 초기화합니다.
arc4random 0에서 0 사이의 의사 소숫자를 생성합니다.UINT32_MAX(일반적으로 보다 뛰어난 알고리즘을 사용)rand
arc4random_uniform 는 0 ~ 최대값의 의사 소숫자를 생성합니다.
arc4random_buf 버퍼에 유사 대역폭 비트스트림을 채웁니다.
arc4random_stir 에 의해 의사 패킷 번호 생성기가 초기화됩니다.

arc4random난수 함수의 패밀리는 POSIX 표준에서 정의되지 않지만 일부 공통에서 발견됩니다.libc실장.RC4 암호의 유출된 버전의 키스트림 생성기(따라서 "alleged RC4")를 의미했지만, ChaCha20과 같은 다른 암호와 같은 다른 알고리즘이 같은 이름을 사용한 이후 구현되었습니다.

랜덤의 품질은rand통계적으로 무작위로 고려되기에는 대개 너무 약하며, 명시적 시딩이 필요하다.일반적으로는 다음을 사용하는 것이 좋습니다.arc4random대신rand가능한 한.일부 C 라이브러리는rand사용.arc4random_uniform내부적으로

실장

Linux 및 BSD같은 POSIX 시스템에서 수학 함수는 (에서 선언한 바와 같이)<math.h>)는 수학 라이브러리에 별도로 번들되어 있습니다.libm따라서 이러한 함수 중 하나를 사용할 경우 링커에는 명령어가 부여되어야 합니다.-lm여러 가지가 있습니다.libm다음을 포함한 구현:

반드시 다음 이름으로 구현해야 하는 것은 아닙니다.libm다음을 포함합니다.

  • ARM최적화된 연산 루틴
  • GCE-Math는 C++용으로 작성된 C/C++ 함수 버전입니다.constexpr(시간 계산)
  • SIMD(벡터화) 연산 라이브러리에는 SLEEF, Yeppp!Agner Fog의 VCL과 더불어 SVML [7]및 DirectXMath와 같은 몇 가지 클로즈드 소스 라이브러리가 포함됩니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b ISO/IEC 9899:1999 specification (PDF). p. 212, § 7.12.
  2. ^ Prata, Stephen (2004). C primer plus. Sams Publishing. Appendix B, Section V: The Standard ANSI C Library with C99 Additions. ISBN 0-672-32696-5.
  3. ^ a b Prata, Stephen (2004). C primer plus. Sams Publishing. Appendix B, Section VIII: C99 Numeric Computational Enhancements. ISBN 0-672-32696-5.
  4. ^ 통지로 볼 때 정사각형이나 큐브를 계산하려면 pow(x,2) 또는 pow(x,3)를 사용하는 것이 편리해 보일 수 있습니다.단, 이는 시간 크리티컬코드에서는 권장되지 않습니다.구현이 컴파일 시 이러한 케이스에 특별히 대응하지 않는 한 x*x 또는 x*x*x는 훨씬 빠르게 실행됩니다.또한 sqrt(x) 및 cbrt(x)는 pow(x,.5) 또는 pow(x,1.3)보다 우선해야 합니다.
  5. ^ man cerf(3), man cerfc(3), 예를 들어 https://linux.die.net/man/3/cerf를 참조하십시오.
  6. ^ "The GNU C Library – ISO Random". Retrieved 18 July 2018.
  7. ^ Cordes, Peter. "intel - Where is Clang's '_mm256_pow_ps' intrinsic?". Stack Overflow.

외부 링크