Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

fesetround() และ fegetround() ใน C++

ฟังก์ชันใน <cfenv> สำหรับควบคุมและตรวจสอบโหมดการปัดเศษ floating point

fesetround(round)

ตั้งค่า rounding mode คืนค่า 0 หากสำเร็จ โหมดที่รองรับ:

  • FE_TONEAREST - ปัดไปค่าที่ใกล้ที่สุด
  • FE_DOWNWARD - ปัดลง (toward -∞)
  • FE_UPWARD - ปัดขึ้น (toward +∞)
  • FE_TOWARDZERO - ปัดเข้าศูนย์ (truncate)

fegetround()

คืนค่า macro ของ rounding mode ปัจจุบัน

โค้ดตัวอย่าง

#include <cfenv> #include <cmath> #include <iostream>
using namespace std;

void print_mode() {
    switch (fegetround()) {
        case FE_TONEAREST: cout << "FE_TONEAREST"; break;
        case FE_DOWNWARD:  cout << "FE_DOWNWARD"; break;
        case FE_UPWARD:    cout << "FE_UPWARD"; break;
        case FE_TOWARDZERO:cout << "FE_TOWARDZERO"; break;
    }
    cout << endl;
}

int main() {
    double x = 4.7;
    fesetround(FE_TONEAREST); cout << rint(x) << " "; print_mode(); // 5
    fesetround(FE_TOWARDZERO); cout << rint(x) << " "; print_mode(); // 4
    fesetround(FE_DOWNWARD); cout << rint(x) << " "; print_mode(); // 4
    fesetround(FE_UPWARD); cout << rint(x) << " "; print_mode(); // 5
}

ผลลัพธ์

5 FE_TONEAREST
4 FE_TOWARDZERO
4 FE_DOWNWARD
5 FE_UPWARD