Computer >> Máy Tính >  >> Lập trình >> C ++

Fesetround () và fegetround () trong C ++

Ở đây chúng ta sẽ thấy phương thức fesetround () và fegetround () trong C ++. Bạn có thể tìm thấy các phương pháp này trong thư viện cfenv.

Phương thức fesetround () được sử dụng để đặt hướng làm tròn dấu phẩy động được chỉ định thành hướng làm tròn hiện tại. Điều này được sử dụng với rint (), nearint () và một số hàm làm tròn khác trong C ++.

Cú pháp như sau -

int fesetround(int round);

Vòng có thể nằm trong số FE_TONEAREST, FE_DOWNWARD, FE_UPWARD, v.v. Hàm này trả về 0 khi hướng làm tròn được áp dụng thành công theo cách bắt buộc.

Ví dụ

#include <cfenv >
#include <cmath>
#include <iostream>
using namespace std;
main() {
   double x = 4.7, ans;
   fesetround(FE_TONEAREST); //round to nearest integer
   ans = rint(x);
   cout << "Nearest Integer is: " << ans << endl;
   fesetround(FE_TOWARDZERO); //rounding towards zero
   ans = rint(x);
   cout << "Rounding towards 0, value is: " << ans << endl;
   fesetround(FE_DOWNWARD); //rounding to downwards
   ans = rint(x);
   cout << "Nearest Integer below the number: " << ans << endl;
   fesetround(FE_UPWARD); //rounding to upwards
   ans = rint(x);
   cout << "Nearest Integer above the number: " << ans << endl;
}

Đầu ra

Nearest Integer is: 5
Rounding towards 0, value is: 4
Nearest Integer below the number: 4
Nearest Integer above the number: 5

Bây giờ chúng ta hãy xem phương thức fegetround () được sử dụng để lấy macro làm tròn dấu chấm động tương ứng với hướng làm tròn hiện tại. Hàm này được sử dụng với rint (), nearint () và một số phương thức làm tròn khác trong C ++.

Cú pháp như sau -

int fegetround();

Điều này trả về số tương ứng với macro làm tròn dấu phẩy động.

  • FE_DOWNWARD
  • FE_TONEAREST
  • FE_TOWARDZERO
  • FE_UPWARD

Ví dụ

#include <cfenv >
#include <cmath>
#include <iostream>
using namespace std;
void float_direction() {
   switch (fegetround()) {
      case FE_TONEAREST:
         cout << "Macro is: FE_TONEAREST";
      break;
      case FE_DOWNWARD:
         cout << "Macro is: FE_DOWNWARD";
      break;
      case FE_UPWARD:
         cout << "Macro is: FE_UPWARD";
      break;
      case FE_TOWARDZERO:
         cout << "Macro is: FE_TOWARDZERO";
      break;
      default:
         cout << "unknown";
   };
   cout << endl;
}
main() {
   double x = 4.7, ans;
   fesetround(FE_TONEAREST); //round to nearest integer
   ans = rint(x);
   cout << "Nearest Integer is: " << ans << endl;
   float_direction();
   fesetround(FE_TOWARDZERO); //rounding towards zero
   ans = rint(x);
   cout << "Rounding towards 0, value is: " << ans << endl;
   float_direction();
   fesetround(FE_DOWNWARD); //rounding to downwards
   ans = rint(x);
   cout << "Nearest Integer below the number: " << ans << endl;
   float_direction();
   fesetround(FE_UPWARD); //rounding to upwards
   ans = rint(x);
   cout << "Nearest Integer above the number: " << ans << endl;
   float_direction();
}

Đầu ra

Nearest Integer is: 5
Macro is: FE_TONEAREST
Rounding towards 0, value is: 4
Macro is: FE_TOWARDZERO
Nearest Integer below the number: 4
Macro is: FE_DOWNWARD
Nearest Integer above the number: 5
Macro is: FE_UPWARD