📜  C++ 中的 rint()、fesetround()、rintf()、rintl()

📅  最后修改于: 2022-05-13 01:55:04.005000             🧑  作者: Mango

C++ 中的 rint()、fesetround()、rintf()、rintl()

我们将在本文中讨论 C++ 中的 rint()、fesetround()、rintf() 和 rintl() 函数。

1) rint(): 用于将浮点参数四舍五入为整数值(浮点格式)。您还可以使用函数fesetround()确定当前舍入模式,rint 函数根据该函数返回舍入的整数值。它包含在头文件中。

句法:

double rint(double x);
float rint(float x);
long double rint(long double x);

参数: rint()函数采用单个参数值进行舍入。

返回:默认情况下,舍入方向设置为“到最近”,否则 rint()函数使用 fegetround() 指定的舍入方向将参数舍入为整数值并返回该值。

异常或错误:

  • 如果函数的结果超出返回类型的范围,可能会出现域错误错误。
  • 如果参数为 0,则原样返回。
  • 如果参数是无限的,它会原封不动地返回。

例子:

Input : 3.3
Output : 3

Input : 3.5
Output : 4

Input : 3.7
Output : 4
CPP
// CPP program to illustrate rint()
#include 
#include 
using namespace std;
  
// Driver Code
int main()
{
    double a, b, x = 3.3, y = 3.7;
  
    // Saves the rounded value to a variable
    a = rint(x);
    b = rint(y);
  
    // Prints the rounded value
    cout << a << endl;
  
    cout << b;
    return 0;
}


CPP
// CPP program to illustrate rint()
// with fesetround() function
#include 
#include 
#include 
using namespace std;
  
// Driver Code
int main()
{
    double x = 3.7, y = 3.3, result;
  
    // setting rounding direction to DOWNWARD
    fesetround(FE_DOWNWARD);
  
    result = rint(x);
    cout << result << endl;
  
    // setting rounding direction to UPWARD
    fesetround(FE_UPWARD);
  
    result = rint(y);
    cout << result << endl;
  
    return 0;
}


CPP
// CPP program to illustrate rinft()
#include 
#include 
#include 
using namespace std;
  
// Driver Code
int main()
{
    float x = 3.76542, y = 3.37562, result;
    // setting rounding direction to DOWNWARD
    fesetround(FE_DOWNWARD);
  
    result = rintf(x);
    cout << result << endl;
  
    // setting rounding direction to UPWARD
    fesetround(FE_UPWARD);
  
    result = rintf(y);
    cout << result << endl;
  
    return 0;
}


CPP
// CPP program to illustrate rinfl()
  
#include 
#include 
#include 
using namespace std;
  
// Driver Code
int main()
{
    long double x = 3.765426764, y = 3.37562657, result;
  
    // setting rounding direction to DOWNWARD
    fesetround(FE_DOWNWARD);
  
    result = rintl(x);
    cout << result << endl;
  
    // setting rounding direction to UPWARD
    fesetround(FE_UPWARD);
  
    result = rintl(y);
    cout << result << endl;
  
    return 0;
}


输出
3
4

2) fesetround()函数:默认情况下,舍入方向设置为最接近的整数。但是使用 fesetround()函数,我们可以选择我们的方向。它包含在头文件中。

句法:

fesetround(FE_DOWNWARD)
fesetround(FE_UPWARD)

例子:

  • 如果 rint()函数与参数 3.7 一起使用,并且还使用 fesetround(FE_DOWNWARD),则输出将为 3
  • 如果 rint()函数与参数 3.3 一起使用,并且还使用 fesetround(FE_UPWARD),则输出将为 4

CPP

// CPP program to illustrate rint()
// with fesetround() function
#include 
#include 
#include 
using namespace std;
  
// Driver Code
int main()
{
    double x = 3.7, y = 3.3, result;
  
    // setting rounding direction to DOWNWARD
    fesetround(FE_DOWNWARD);
  
    result = rint(x);
    cout << result << endl;
  
    // setting rounding direction to UPWARD
    fesetround(FE_UPWARD);
  
    result = rint(y);
    cout << result << endl;
  
    return 0;
}
输出
3
4

3) rintf()函数: rintf()函数与 rint函数相同。唯一的区别是函数的参数和返回类型是浮点类型。 'rintf' 后面的 'f'字符代表浮点数,它表示函数的参数类型和返回类型。

句法:

float rintf(float x);

在这里,变量被分配为浮点类型,否则会发生类型不匹配错误。

CPP

// CPP program to illustrate rinft()
#include 
#include 
#include 
using namespace std;
  
// Driver Code
int main()
{
    float x = 3.76542, y = 3.37562, result;
    // setting rounding direction to DOWNWARD
    fesetround(FE_DOWNWARD);
  
    result = rintf(x);
    cout << result << endl;
  
    // setting rounding direction to UPWARD
    fesetround(FE_UPWARD);
  
    result = rintf(y);
    cout << result << endl;
  
    return 0;
}
输出
3
4

4) rintl()函数: rintl()函数与rint函数相同,唯一不同的是函数的参数和返回类型为long double类型。'rintl'后面的'l'字符代表long double它表示函数的参数类型和返回类型。
句法:

long double rintl(long double x);

在这里,变量被分配了 long double 类型,否则会发生类型不匹配错误。

CPP

// CPP program to illustrate rinfl()
  
#include 
#include 
#include 
using namespace std;
  
// Driver Code
int main()
{
    long double x = 3.765426764, y = 3.37562657, result;
  
    // setting rounding direction to DOWNWARD
    fesetround(FE_DOWNWARD);
  
    result = rintl(x);
    cout << result << endl;
  
    // setting rounding direction to UPWARD
    fesetround(FE_UPWARD);
  
    result = rintl(y);
    cout << result << endl;
  
    return 0;
}
输出
3
4