Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

sqrt, sqrtf, sqrtf trong C++ - Căn bậc hai cho từng kiểu


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àmTham sốTrả vềĐộ chính xác
sqrtffloatfloat~7 chữ số
sqrtdoubledouble~15 chữ số
sqrtllong doublelong 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::sqrt nạ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ặc errno == EDOM cho đầu vào âm.