std::log10 cho số phức (header <complex>) tính logarit cơ số 10 của một số phức. Trả về giá trị chính (principal value).
Cú pháp
template<class T> complex<T> log10(const complex<T>& z);
Công thức
log10(z) = log(z) / log(10)
= ln(z) / ln(10)
Trong đó log(z) (hoặc ln(z)) là logarit tự nhiên phức:
log(z) = ln|z| + i*arg(z), -π < arg(z) ≤ π
Ví dụ 1: Số phức góc phần tư 3
#include <bits/stdc++.h>
using namespace std;
int main() {
complex<double> z(-4.0, -1.0); // -4 - i (góc phần tư 3)
complex<double> result = log10(z);
cout << "log10(" << z << ") = " << result << '\n';
return 0;
}
Đầu ra
log10(-4,-1) = (0.615224,-1.25798)
Ví dụ 2: Số phức góc phần tư 2
#include <bits/stdc++.h>
using namespace std;
int main() {
complex<double> z(-4.0, 1.0); // -4 + i (góc phần tư 2)
complex<double> result = log10(z);
cout << "log10(" << z << ") = " << result << '\n';
return 0;
}
Đầu ra
log10(-4,1) = (0.615224,1.25798)
Phân tích kết quả
Với z = -4 ± i:
- Module:
|z| = sqrt(16 + 1) = sqrt(17) ≈ 4.1231 - Logarit tự nhiên module:
ln(4.1231) ≈ 1.4166 - Logarit cơ số 10 module:
log10(4.1231) = ln(4.1231)/ln(10) ≈ 1.4166/2.3026 ≈ 0.6152(phần thực) - Góc (argument):
arg(-4 ± i) = ±(π - atan(1/4)) ≈ ±2.8966 rad - Phần ảo của log10:
arg(z)/ln(10) ≈ ±2.8966/2.3026 ≈ ±1.2580
So sánh log() vs log10()
#include <bits/stdc++.h>
using namespace std;
int main() {
complex<double> z(-4.0, -1.0);
cout << "log(z) = " << log(z) << '\n'; // ln(z)
cout << "log10(z)= " << log10(z) << '\n'; // log10(z)
cout << "log(z)/log(10) = " << log(z)/log(10.0) << '\n'; // Verify
return 0;
}
Đầu ra
log(z) = (1.41661,-2.89661) log10(z)= (0.615224,-1.25798) log(z)/log(10) = (0.615224,-1.25798)
Lưu ý
- Nhánh cắt (branch cut) của log phức là trục thực âm. Kết quả có thể khác nhau tùy implementation khiargument gần -π.
log10(0)không xác định (trả về-infhoặc ném exception).- Dùng
std::logcho logarit tự nhiên,std::log10cho cơ số 10.