Thư viện <cmath> cung cấp 3 hàm căn bậc hai cho 3 kiểu dấu chấm động:
Bảng so sánh
| Hàm | Tham số | Trả về | Độ chính xác |
|---|---|---|---|
sqrtf | float | float | ~7 chữ số |
sqrt | double | double | ~15 chữ số |
sqrtl | long double | long double | ~18-33 chữ số |
Ví dụ mã nguồn
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main() {
float f = 2.0f;
double d = 2.0;
long double ld = 2.0L;
cout << fixed << setprecision(10);
cout << "sqrtf(2) = " << sqrtf(f) << '\n';
cout << "sqrt(2) = " << sqrt(d) << '\n';
cout << "sqrtl(2) = " << sqrtl(ld) << '\n';
// Số lớn cần long double
long double huge = 1e18L;
cout << "sqrtl(1e18) = " << sqrtl(huge) << '\n';
// Tham số âm -> NaN, đặt errno = EDOM
cout << "sqrt(-1) = " << sqrt(-1.0) << " (NaN)\n";
return 0;
}
Đầu ra
sqrtf(2) = 1.4142135624 sqrt(2) = 1.4142135624 sqrtl(2) = 1.4142135623730950488 sqrtl(1e18) = 1000000000.0000000000 sqrt(-1) = nan (NaN)
Lưu ý
- C++17:
std::sqrtnạp chồng cho tất cả 3 kiểu, tự động chọn theo tham số. - Luôn include
<cmath>, không phải<math.h>(C-style). - Kiểm tra
std::isnan()hoặcerrno == EDOMcho đầu vào âm.