C ++ feclearexcept () - Thư viện chuẩn C ++

Hàm feclearexcept () trong C ++ cố gắng xóa các cờ ngoại lệ dấu chấm động được chỉ định bởi đối số ngoại lệ.

Hàm feclearexcept () được định nghĩa trong tệp tiêu đề.

feclearexcept () Nguyên mẫu

 int feclearexcept (int exceptions);

Để chức năng hoạt động, bạn nên bật FENV_ACCESS , điều này sẽ cung cấp cho chương trình của bạn quyền truy cập vào môi trường Dấu chấm động để kiểm tra các ngoại lệ được nêu ra.

tham số feclearexcept ()

  • ngoại lệ: Bitmask liệt kê các cờ ngoại lệ để xóa
Bitmask chấp nhận macro
Macro Kiểu Sự miêu tả
FE_DIVBYZERO Lỗi cực Chia cho số không
FE_INEXACT Không liên hệ Kết quả không chính xác như (1.0 / 3.0)
FE_INVALID Lỗi tên miền Ít nhất một đối số được sử dụng là một giá trị mà hàm không được xác định
FE_OVERFLOW Lỗi phạm vi tràn Kết quả có độ lớn quá lớn để được biểu thị bằng kiểu trả về
FE_UNDERFLOW Lỗi phạm vi dòng chảy dưới Kết quả có độ lớn quá nhỏ để được biểu thị bằng kiểu trả về
FE_ALL_EXCEPT Tất cả các trường hợp ngoại lệ Tất cả các trường hợp ngoại lệ được hỗ trợ bởi việc triển khai

feclearexcept () Giá trị trả về

  • Hàm feclearexcept () trả về giá trị 0 nếu tất cả các ngoại lệ đã bị xóa hoặc nếu các ngoại lệ bằng 0.
  • Nó trả về nonzero nếu có bất kỳ lỗi nào xảy ra.

Ví dụ: Hàm feclearexcept () hoạt động như thế nào?

 #include #include #include #pragma STDC FENV_ACCESS ON using namespace std; int main() ( // clears all exceptions feclearexcept(FE_ALL_EXCEPT); cout << "1/0 = " << 1.0/0.0 << endl; // tests if above statement raised the FE_DIVBYZERO exception if(fetestexcept(FE_DIVBYZERO)) ( cout << "FE_DIVBYZERO is set" << endl; ) else ( cout << "FE_DIVBYZERO is not set" << endl; ) feclearexcept(FE_ALL_EXCEPT); cout << "sqrt(-1) = " << sqrt(-1) << endl; if(fetestexcept(FE_INVALID)) ( cout << "FE_INVALID is set" << endl; ) else ( cout << "FE_INVALID is not set" << endl; ) )

Khi bạn chạy chương trình, đầu ra sẽ là:

 1/0 = inf FE_DIVBYZERO được đặt sqrt (-1) = -nan FE_INVALID được đặt

thú vị bài viết...