2ˣ = 10 은 지금까지의 도구로 풀리지 않습니다. 그 답에 이름을 붙이고, 지수법칙을 한 줄씩 옮겨 로그 법칙 셋과 밑변환 공식을 만듭니다.
PALDYN Team//34 MIN READ
22MATH
초급
로그 · 역함수
지난 글은 2x=10 을 남기고 끝났습니다. x 에 수를 넣어 값을 얻는 일은 했지만, 값이 주어지고 지수를 묻는 일은 하지 못했습니다.
이 글은 그 답에 이름을 붙이는 데서 시작합니다.
로그의 정의
2x=8 이라면 답은 3입니다. 2x=10 은 어떨까요. 23=8 이고 24=16 이니 3과 4 사이 어딘가입니다. 지수 곡선은 오른쪽으로 쭉 오르기만 하므로 높이 10을 정확히 한 번 지나고, 답은 분명히 하나 있습니다. 다만 지금 가진 기호로는 그 수를 적을 방법이 없습니다.
이럴 때 수학이 하는 일은 정해져 있습니다. 없는 것을 만들어 내는 것이 아니라, 이미 있는 것에 이름을 붙이는 것 입니다.
ax=b⟺x=logab
logab 는 "a 를 몇 제곱해야 b 가 되는가"에 대한 답입니다. a 를 밑, b 를 진수 라 합니다. 새로운 계산이 아니라 이미 있는 답을 가리키는 이름표 입니다.
읽는 연습을 몇 개 합니다.
식
묻는 것
답
log28
2를 몇 제곱하면 8인가
3
log381
3을 몇 제곱하면 81인가
4
log5251
5를 몇 제곱하면 251 인가
−2
log77
7을 몇 제곱하면 7인가
1
log71
7을 몇 제곱하면 1인가
0
밑에 붙는 조건은 지수함수와 같습니다. a>0 이고 a=1 입니다. 진수 쪽에는 조건이 하나 더 붙는데, 그 이유는 다음 절의 그림에서 바로 보입니다.
역관계 항등식
정의는 화살표가 양쪽으로 난 문장입니다. 왼쪽 식을 오른쪽에 넣고, 오른쪽 식을 왼쪽에 넣으면 항등식이 하나씩 나옵니다. 두 줄뿐이지만 뒤에서 거의 모든 계산이 이 둘을 밟고 지나갑니다.
logaax=x,alogax=x
앞의 줄은 이렇게 읽습니다. "a 를 몇 제곱하면 ax 이 되는가" — 물음 안에 답이 이미 적혀 있으니 x 입니다. log335=5 이고 log1010−2=−2 입니다.
뒤의 줄은 이렇게 읽습니다. logax 는 "a 를 몇 제곱하면 x 인가"의 답이므로, a 를 정말 그만큼 제곱하면 x 로 돌아옵니다. 2log27=7 입니다.
두 줄은 조건이 다릅니다. 앞의 줄은 x 가 음수든 0이든 상관없습니다. 뒤의 줄은 logax 가 있어야 하므로 x>0 일 때만 쓸 수 있습니다. 이 차이를 흘려 두면 뒤에서 진수 조건을 빠뜨리게 됩니다.
진수의 크기와 값의 부호
로그 값을 구하지 않고 부호만 말할 수 있으면 검산이 빨라집니다. 밑이 1보다 큰 경우부터 봅니다.
a>1 이면 a0=1 이고 지수를 키울수록 값이 커집니다. 그러므로 진수가 1보다 크려면 지수가 0보다 커야 하고, 진수가 0과 1 사이이려면 지수가 음수여야 합니다.
진수 b
log2b 의 부호
예
b>1
양수
log28=3
b=1
0
log21=0
0<b<1
음수
log20.5=−1
밑이 0과 1 사이이면 지수를 키울수록 값이 작아지므로 이 표가 통째로 뒤집힙니다. log1/28=−3 이고 log1/20.5=1 입니다.
부호는 답이 아니라 답의 방향입니다.log20.001 을 계산하기 전에 "0과 1 사이이니 음수"라고 먼저 적어 두면, 계산 결과가 양수로 나왔을 때 그 자리에서 틀린 것을 압니다.
log₂3의 무리성
log23 을 계산기로 두드리면 1.5849625… 가 나오고 소수점 아래가 끝나지 않습니다. 이 수는 분수로 적을 수 없습니다. 13번 글에서 세운 방식대로 한 줄로 확인할 수 있습니다.
log23 이 유리수라고 해 봅시다. 그러면 자연수 p, q 로 log23=qp 라 적을 수 있고, 정의를 되돌리면 2p/q=3 입니다. 양변을 q 제곱합니다.
2p=3q
왼쪽은 2를 여러 번 곱한 수라 짝수이고, 오른쪽은 3을 여러 번 곱한 수라 홀수입니다. 짝수와 홀수가 같을 수 없으므로 그런 p 와 q 는 없습니다. 분수로 적을 수 있다는 가정이 무너졌으니 log23 은 유리수가 아닙니다.
이것이 "이름을 붙였다"는 말의 진짜 뜻입니다. log23 은 게을러서 계산을 안 한 것이 아니라, 분수로도 유한소수로도 적을 방법이 아예 없어서 이름 말고는 정확히 적을 도리가 없는 수 입니다. 2 를 1.414 로 적지 않고 근호 그대로 두는 것과 같은 사정입니다.
y=2x 을 x 에 대해 풀면 정의에 따라 x=log2y 이고, 문자를 맞바꾸면 y=log2x 입니다. 지수함수와 로그함수는 서로의 역함수 이고, 따라서 두 그래프는 y=x 에 대해 대칭입니다.
그림에서 세 가지가 그대로 읽힙니다.
2x 은 양수만 내놓았습니다. 거꾸로 돌린 함수는 그 양수만 받으므로 정의역이 x>0 입니다. 진수가 양수여야 하는 이유가 이것입니다.
2x 이 (0,1) 을 지났으므로 좌표를 맞바꾼 (1,0) 을 지납니다. 밑이 무엇이든 그렇습니다.
2x 의 점근선 y=0 도 함께 비춰져 x=0, 곧 y 축이 됩니다.
밑의 역수
밑이 1보다 작은 로그도 정의는 같습니다. 표를 하나 채워 봅니다.
x
log2x
log1/2x
21
−1
1
1
0
0
2
1
−1
4
2
−2
8
3
−3
두 열의 크기가 같고 부호만 반대입니다. 표만 보고 짐작하지 말고 한 줄로 확인합니다. t=log1/2x 라 하면 정의에 따라 (21)t=x 이고, 21=2−1 이므로 2−t=x 입니다. 이번에는 밑 2로 읽으면 −t=log2x 입니다.
log1/ax=−logax
값에 −1 을 곱한 것이므로 그래프는 x 축을 거울로 삼아 뒤집힌 모양 입니다. 밑이 1보다 큰 곡선은 오른쪽으로 오르고, 밑이 0과 1 사이인 곡선은 오른쪽으로 내립니다.
두 곡선이 만나는 곳은 (1,0) 한 점뿐입니다. 밑이 무엇이든 loga1=0 이기 때문입니다.
일대일 함수
그림에서 한 가지를 더 읽어 둡니다. 로그 곡선은 한쪽으로만 오르거나 한쪽으로만 내려서 같은 높이를 두 번 지나지 않습니다. 입력이 다르면 출력도 반드시 다른 함수를 일대일 함수 라고 합니다. 19번 글에서 함수가 "입력 하나에 출력 하나"라고 했는데, 일대일은 그 반대 방향까지 하나라는 뜻입니다.
logaM=logaN⟹M=N
말로 옮기면 이렇습니다. 로그 값이 같으면 진수도 같습니다. 뒤에서 방정식을 풀 때 "양변에 로그를 취한다"거나 "양변의 로그를 벗긴다"고 하는 조작이 전부 이 성질에 기대고 있습니다. 양변에 같은 것을 씌워도 참인 값이 늘거나 줄지 않는다는 보장이 여기서 나옵니다.
지수함수도 마찬가지로 일대일이라 2M=2N 이면 M=N 입니다. 서로의 역함수이니 당연한 짝입니다.
로그 법칙
로그 법칙은 외울 것이 아니라 지수법칙을 한 줄씩 번역한 것 입니다. 유도는 세 번 모두 같은 방식입니다. 양수 x,y 를 밑 a 의 거듭제곱으로 적어 두고 시작합니다.
x=am,y=an즉m=logax,n=logay
곱과 몫의 법칙
하나 — 곱은 합으로.xy=aman=am+n 이므로 xy 를 얻으려면 a 를 m+n 제곱해야 합니다.
loga(xy)=logax+logay
둘 — 몫은 차로.yx=am−n 이므로 같은 논리입니다.
logayx=logax−logay
이 둘이 로그를 쓰는 이유의 절반입니다. 곱하기와 나누기라는 무거운 계산이 더하기와 빼기로 내려옵니다.
거듭제곱의 법칙
셋 — 거듭제곱은 상수배로.xk=(am)k=amk 입니다.
logaxk=klogax
교과서는 이 법칙을 왼쪽에서 오른쪽으로 읽어 지수를 앞으로 빼는 데 씁니다. 그런데 유도에서 실제로 더 자주 쓰는 것은 오른쪽에서 왼쪽입니다 — 앞에 붙은 계수를 지수로 올려서 로그 하나로 묶는 방향입니다. 여러 로그를 합칠 때 계수가 붙어 있으면 앞의 두 법칙을 못 쓰기 때문입니다.
로그가 든 식은 푸는 순서가 정해져 있습니다. 답을 구하기 전에 진수가 양수라는 조건부터 적어 둡니다.
로그마다 진수 조건을 적는다.
법칙으로 묶어 로그 하나로 만든다.
정의로 되돌려 로그를 벗기고 푼다.
얻은 답이 1번의 조건을 지키는지 본다.
위의 log2(x+3)=4 라면 1번에서 x+3>0, 곧 x>−3 을 적어 두고, 4번에서 x=13 이 그 조건 안이라 통과합니다. 조건이 한 번도 걸리지 않는 문제가 많아 건너뛰기 쉬운데, 바로 다음 소절이 걸리는 자리입니다.
가짜 해
log2x+log2(x−3)=2
먼저 조건입니다. x>0 이고 x−3>0 이어야 하므로 둘을 함께 지키는 범위는 x>3 입니다. 이제 첫째 법칙으로 묶습니다.
log2x(x−3)=2→x(x−3)=22=4
x2−3x−4=0→(x−4)(x+1)=0
15번 글의 인수분해로 x=4 와 x=−1 이 나왔습니다. 그런데 x=−1 을 원래 식에 넣으면 log2(−1) 이 되어 뜻이 없습니다. 조건 x>3 을 지키는 x=4 만 답입니다.
이런 답을 가짜 해 라고 합니다. 왜 생겼는지가 중요합니다. log2x+log2(x−3) 은 x>3 에서만 뜻이 있지만, 묶어서 만든 log2x(x−3) 은 x(x−3)>0 이기만 하면 되므로 x<0 인 자리에서도 뜻이 있습니다. 묶는 조작이 정의역을 넓혔고, 넓어진 자리에서 새 답이 딸려 들어온 것입니다.
그래서 순서의 1번과 4번이 있습니다. 조건을 나중에 적으려 하면 이미 넓어진 식만 남아 있어 원래 범위를 되찾을 수 없습니다.
지수방정식
미지수가 지수 자리에 있는 식은 반대로 갑니다. 양변에 로그를 취해 지수를 앞으로 꺼내면 됩니다. 앞 절에서 로그함수가 일대일이라 했으니 양변에 로그를 취해도 해가 늘거나 줄지 않습니다.
3x=7
log3x=log7→xlog3=log7→x=log3log7
log7=0.8451 과 log3=0.4771 을 넣으면 x=1.7714… 입니다. 31=3 과 32=9 사이이고 7이 9에 가까우니 2에 가까운 값이 나온 것이 맞습니다.
진수 조건은 이쪽에서는 걸리지 않습니다.3x 은 언제나 양수라 로그를 취할 수 있고, 넓어지는 자리가 없기 때문입니다. 로그가 든 식과 지수가 든 식은 이렇게 조심할 자리가 서로 다릅니다.
연습 문제
밑변환이 필요한 문제는 log102=0.3010, log103=0.4771 만 쓰면 풀립니다.
연습 1 — 값 여섯 문제
log264
6. 26=64 입니다.
log20.125
−3. 0.125=81=2−3 입니다.
log391
−2.
log1010000
4.
log61
0. 어떤 밑이든 1의 로그는 0입니다.
log93
21. 91/2=3 이기 때문입니다.
연습 2 — 부호만 말하기 세 문제
계산하지 말고 양수인지 음수인지만 답하세요.
log30.2
음수. 밑이 1보다 크고 진수가 0과 1 사이입니다.
log1/30.2
양수. 밑이 0과 1 사이라 앞 문제의 부호가 뒤집힙니다.
log55.1
양수. 진수가 1보다 큽니다. 1보다 조금 큰 값입니다.
연습 3 — 법칙 여섯 문제
log212+log234
곱으로 묶으면 log2(12×34)=log216=4.
log354−log32
몫으로 묶으면 log327=3.
log5(254)
지수를 앞으로 빼면 4log525=4×2=8.
log2(4+4) 와 log24+log24 를 각각 구하세요.
앞은 log28=3, 뒤는 2+2=4 입니다. 달라서 덧셈에는 법칙이 없습니다.
3log22+log25 를 로그 하나로 묶으세요.
계수를 지수로 올리면 log223+log25=log28+log25=log240.
logayzx3 를 로그 셋의 합과 차로 펴세요.
근호를 z1/2 로 고친 뒤 하나씩 옮기면 3logax−logay−21logaz.
연습 4 — 밑변환 네 문제
log21000 을 소수 둘째 자리까지
log102log101000=0.30103=9.9668…≈9.97. 210=1024 가 1000보다 조금 크니 10보다 조금 작은 것이 맞습니다.
log381=4 이고 밑과 진수를 맞바꾸면 역수이므로 41. 811/4=3 으로 확인됩니다.
log927
밑과 진수가 모두 3의 거듭제곱입니다. log39log327=23.
연습 5 — 식 풀기 세 문제
log3(x−1)=2
x−1=32=9 이므로 x=10. 진수 x−1=9>0 이라 괜찮습니다.
log5(3x+1)=2
3x+1=25 이므로 3x=24, x=8. 진수 25>0 입니다.
log3x+log3(x−2)=1
조건은 x>2 입니다. 묶으면 x(x−2)=3 이므로 x2−2x−3=0, 곧 (x−3)(x+1)=0 입니다. x=3 과 x=−1 중 조건을 지키는 것은 x=3 뿐입니다.
연습 6 — 자릿수 두 문제
350 은 몇 자리 수인가요.
log350=50×0.4771=23.855 이고 정수부가 23이므로 24자리입니다.
264 는 몇 자리 수인가요.
64×0.3010=19.264 이고 정수부가 19이므로 20자리입니다.
연습 7 — 그래프 한 문제
y=log2(x−1)+1 의 점근선과, 이 곡선이 x 축과 만나는 점
오른쪽으로 1, 위로 1 옮긴 것이라 점근선은 x=1 입니다. x 축과 만나려면 log2(x−1)=−1 이어야 하고, 이는 x−1=2−1=21 이므로 x=1.5 입니다.
연습 8 — 곱을 합으로 바꿔 계산하기 한 문제
3200×45000 을 상용로그를 취해 합으로 바꿔 계산한 뒤 되돌리세요.
3200=25×102 이므로 log3200=5(0.3010)+2=3.5050 입니다. 45000=32×5×103 이고 log5=1−0.3010=0.6990 이므로 log45000=2(0.4771)+0.6990+3=4.6532 입니다. 더하면 8.1582 입니다. 되돌리려면 소수 부분 0.1582 의 진수를 찾아야 하는데, 1.44=10224×32 이므로 log1.44=4(0.3010)+2(0.4771)−2=0.1582 로 딱 맞습니다. 따라서 108.1582=1.44×108=144000000 입니다.
곱셈 한 번이 덧셈 한 번으로 바뀌었습니다. 계산기가 없던 시절에 로그표가 쓰인 이유가 이것이고, 지금도 아주 큰 수를 다룰 때 같은 이유로 씁니다.
정리
logab 는 "a 를 몇 제곱해야 b 가 되는가"의 답에 붙인 이름입니다. ax=b 와 x=logab 는 같은 말을 두 번 적은 것입니다.
정의를 서로에게 넣으면 logaax=x 와 alogax=x 가 나옵니다. 지수와 로그는 서로를 지웁니다.
밑이 1보다 클 때 진수가 1보다 크면 값이 양수, 0과 1 사이면 음수입니다. 밑이 0과 1 사이면 뒤집힙니다.
로그함수는 지수함수의 역함수라 그래프가 y=x 대칭입니다. 정의역은 x>0, 점근선은 y 축, 그리고 (1,0) 을 지납니다.
밑을 뒤집으면 부호가 뒤집힙니다 — log1/ax=−logax. 두 곡선은 x 축 대칭입니다.
로그함수는 일대일이라 값이 같으면 진수도 같습니다. 양변에 로그를 취해도 해가 늘거나 줄지 않는 근거가 이것입니다.
법칙 셋은 지수법칙의 번역입니다. 곱은 합으로, 몫은 차로, 거듭제곱은 상수배로. 셋째 법칙은 계수를 지수로 올려 묶는 방향으로도 자주 씁니다.
loga(x+y) 를 쪼개는 법칙은 없습니다.
밑변환 logab=logcalogcb 로 어떤 밑이든 손에 있는 밑으로 바꿔 잽니다. 여기서 logab⋅logba=1 과 logakb=k1logab 가 한 줄로 나옵니다.
밑만 다른 로그는 서로 상수배라 곡선 모양이 같습니다 — lnx=2.3026logx.
상용로그는 밑 10, 자연로그는 밑 e 입니다. logN 의 정수부에 1을 더하면 N 의 자릿수 이고, 로그 눈금은 같은 간격이 같은 배수를 뜻하는 자입니다.
로그가 든 식은 진수 조건을 먼저 적고 풀고, 묶어서 얻은 답은 그 조건으로 걸러 냅니다. 묶는 조작이 정의역을 넓혀 가짜 해를 만들기 때문입니다.
3단계 함수는 여기서 끝납니다. 다음 글은 곡선 하나를 골라 자세히 들여다봅니다. 꼭짓점이 어디인지, x 축과 몇 번 만나는지를 식만 보고 말할 수 있게 됩니다.
실수를 2^b개 격자에 사상할 때 오차의 분산이 왜 Δ²/12인지 유도하고, 그것이 비트당 6.02dB라는 SNR로 번역되는 과정을 실측과 대조했습니다. 이상치 하나가 나머지 값의 유효 비트를 어떻게 먹는지, 그리고 int4에서 성능이 무너지는 지점을 오차 예산으로 미리 계산하는 법까지.
최댓값 빼기, 로그 공간, log1p·expm1, 분산의 두 공식, 정규화의 ε, fp32 누산, 역행렬 대신 solve — 프레임워크가 몰래 해 주는 일곱 가지를 하나씩 꺼내 각각 어떤 고장을 막는지 직접 재 봤습니다. 수식을 그대로 옮긴 코드가 왜 라이브러리보다 나쁜지에 대한 목록입니다.
0.1 + 0.2가 0.3이 아닌 이유부터 시작해 머신 엡실론을 유도하고, 같은 16비트인데 fp16과 bf16이 서로 다른 지점에서 터지는 이유, 비슷한 수를 뺄 때 유효자리가 사라지는 파괴적 상쇄, 그리고 1,000만 개를 순서만 바꿔 더했을 때 오차가 백만 배 갈리는 실험까지 직접 재 봤습니다.