mathfunc — Tcl 표현식에서 쓰는 수학 함수

mathfunc — Tcl 표현식에서 쓰는 수학 함수

Tcl의 expr 안에서 sin($x)atan2($y,$x) 같은 수학 함수를 쓸 수 있다는 걸 눈치채셨을 거예요. 그 함수들이 실제로 어디서 오는 건지 궁금했다면, 답은 ::tcl::mathfunc 네임스페이스예요. expr은 이런 함수 호출을 tcl::mathfunc::... 형태의 명령어 호출로 바꿔 처리해요. 그래서 이 함수들은 expr 말고도 일반 명령어처럼 직접 불러 쓸 수도 있어요.

출처: 문서

본문

expr 명령어는 sin($x)atan2($y,$x) 형태의 수학 함수를 [tcl::mathfunc::sin [expr {$x}]][tcl::mathfunc::atan2 [expr {$y}] [expr {$x}]] 형태의 호출로 변환해 처리해요. ::tcl::mathfunc 네임스페이스 안에는 여러 수학 함수가 기본으로 제공돼요. 이 함수들은 주어진 명령어를 직접 호출하면 expr 밖의 코드에서도 사용할 수 있어요.

Tcl은 표현식에서 다음 수학 함수들을 지원해요. 별도로 언급하지 않는 한 모두 부동소수점 숫자로만 동작해요: abs acos asin atan atan2 bool ceil cos cosh double entier exp floor fmod hypot int isqrt log log10 max min pow rand round sin sinh sqrt srand tan tanh wide

이 기본 함수들 외에도, 애플리케이션은 proc(또는 interp alias, Tcl_CreateObjCommand 같은 다른 방법)으로 tcl::mathfunc 네임스페이스 안에 새 명령어를 정의해 추가 함수를 만들 수 있어요. 또, C로 작성된 확장을 위한 Tcl_CreateMathFunc()라는 구식 인터페이스도 있어요. 이 인터페이스는 새 구현에는 권장되지 않아요.

패키지 요구 구문은 다음과 같아요.

package require Tcl 8.5

함수별 정의

이 함수들은 ::tcl::mathfunc:: 네임스페이스에 속하는 명령어로, 각각 다음 형태예요.

abs arg — arg의 절댓값을 반환해요. arg는 정수나 부동소수점일 수 있고, 결과는 같은 형태로 돌아와요.

acos arg — arg의 아크코사인을 [0,pi] 라디안 범위로 반환해요. arg는 [-1,1] 범위여야 해요.

asin arg — arg의 아크사인을 [-pi/2,pi/2] 라디안 범위로 반환해요. arg는 [-1,1] 범위여야 해요.

atan arg — arg의 아크탄젠트를 [-pi/2,pi/2] 라디안 범위로 반환해요.

atan2 y x — y/x의 아크탄젠트를 [-pi,pi] 라디안 범위로 반환해요. xy가 둘 다 0일 수는 없어요. x가 0보다 크면 atan [expr {y/x}]와 동일해요.

bool arg — 숫자 값이나 string is boolean이 받아들일 수 있는 문자열을 받아, 대응하는 불리언 값 0 또는 1을 반환해요. 0이 아닌 숫자는 참이고, 다른 숫자는 거짓이에요. 숫자가 아닌 문자열은 string is true·string is false에 따라 불리언 값을 만들어요.

ceil arg — arg보다 작지 않은 가장 작은 정수 부동소수점 값(즉 소수부가 0인 값)을 반환해요. 인수는 어떤 숫자 값이든 될 수 있어요.

cos arg — 라디안 단위로 잰 arg의 코사인을 반환해요.

cosh arg — arg의 쌍곡코사인을 반환해요. 결과가 오버플로를 일으키면 오류가 반환돼요.

double arg — 인수는 어떤 숫자 값이든 될 수 있어요. arg가 부동소수점 값이면 arg를, 그렇지 않으면 arg를 부동소수점으로 변환한 값을 반환해요. 인수가 부동소수점 범위를 넘는 숫자 값이면 Inf-Inf를 반환할 수 있어요.

entier arg — 인수는 어떤 숫자 값이든 될 수 있어요. arg의 정수부를 구해 반환해요. 이 함수가 반환하는 정수 범위는 무제한이라, int·wide처럼 특정 저장 너비에 맞추어 범위를 자르지 않아요.

exp arg — e^arg로 정의되는 arg의 지수를 반환해요. 결과가 오버플로를 일으키면 오류가 반환돼요.

floor arg — arg보다 크지 않은 가장 큰 정수 부동소수점 값(즉 소수부가 0인 값)을 반환해요. 인수는 어떤 숫자 값이든 될 수 있어요.

fmod x y — xy로 나눈 부동소수점 나머지를 반환해요. y가 0이면 오류가 반환돼요.

hypot x y — 직각삼각형의 빗변 길이를 구해요. 대략 sqrt [expr {x*x+y*y}]인데, 두 인수의 크기가 크게 다를 때 수치적으로 더 안정적이라는 점이 달라요.

int arg — 인수는 어떤 숫자 값이든 될 수 있어요. arg의 정수부를 구한 다음, 그 정수 값의 하위 비트를 머신 워드 크기까지 정수로 반환해요. 참고로 머신 워드의 바이트 수는 tcl_platform 배열의 wordSize 원소에 저장돼 있어요.

isqrt arg — arg의 제곱근의 정수부를 계산해요. arg는 정수든 부동소수점이든 양의 값이어야 해요. 부동소수점 숫자의 정밀도에 제한되는 sqrt와 달리, isqrt는 임의 정밀도의 결과를 반환해요.

log arg — arg의 자연로그를 반환해요. arg는 양의 값이어야 해요.

log10 arg — arg의 밑이 10인 로그를 반환해요. arg는 양의 값이어야 해요.

max arg ... — 하나 이상의 숫자 인수를 받아 가장 큰 값을 가진 인수 하나를 반환해요.

min arg ... — 하나 이상의 숫자 인수를 받아 가장 작은 값을 가진 인수 하나를 반환해요.

pow x y — xy 거듭제곱한 값을 계산해요. x가 음수이면 y는 정수 값이어야 해요.

rand — (0,1) 범위의 의사 난수 부동소수점 값을 반환해요. 생성기 알고리즘은 암호학적으로 안전하지 않은 단순 선형 합동 생성기예요. rand의 각 결과는 이후 rand 호출들의 모든 미래 결과를 완전히 결정하므로, 일회용 비밀번호 같은 비밀 시퀀스를 만드는 데 rand를 쓰면 안 돼요. 생성기의 시드는 머신의 내부 시계로 초기화되거나 srand 함수로 설정될 수 있어요.

round arg — arg가 정수 값이면 arg를, 그렇지 않으면 arg를 반올림해 정수로 변환한 값을 반환해요.

sin arg — 라디안 단위로 잰 arg의 사인을 반환해요.

sinh arg — arg의 쌍곡사인을 반환해요. 결과가 오버플로를 일으키면 오류가 반환돼요.

sqrt arg — 인수는 음이 아닌 어떤 숫자 값이든 될 수 있어요. arg의 제곱근인 부동소수점 값을 반환해요. 인수가 부동소수점 범위의 최댓값 제곱을 넘는 숫자 값이면 Inf를 반환할 수 있어요.

srand arg — 정수여야 하는 argrand의 난수 생성기 시드를 재설정해요. 그 시드로부터의 첫 번째 난수(rand 참고)를 반환해요. 각 인터프리터는 자신만의 시드를 가져요.

tan arg — 라디안 단위로 잰 arg의 탄젠트를 반환해요.

tanh arg — arg의 쌍곡탄젠트를 반환해요.

wide arg — 인수는 어떤 숫자 값이든 될 수 있어요. arg의 정수부를 구한 다음, 그 정수 값의 하위 64비트를 정수로 반환해요.

더 알아보기

  • expr, mathop, namespace