当前位置: C语言 -- 标准库 -- <math.h> -- ufromfpd32

ufromfpd32函数


概要:
#include <math.h>
#ifdef __STDC_IEC_60559_DFP__
    _Decimal32 ufromfpd32(_Decimal32 x, int rnd, unsigned int width);
#endif 

描述:

该函数根据参数rnd指定的舍入方向,将参数x舍入为浮点形式表示的无符号整数。

如果参数width不为0,并且舍入得到的结果整数值在[0,2width–1]区间范围内,函数返回浮点形式表示的整数值。如果参数width为0,或者参数x不能舍入到上述范围内的整数,函数返回NaN(如果可以,NaN与参数x具有相同类型。);否则返回参数x的值,并发生域错误。

如果参数rnd值不等于舍入方向宏,则舍入方向是未指定的。

该函数不会引发FE_INEXACT浮点异常。


参数:
_Decimal32 x

参数为_Decimal32类型浮点数。

int rnd

参数为int类型整数,其值应为FP_INT_UPWARD、FP_INT_DOWNWARD、FP_INT_TOWARDZERO、FP_INT_TONEARESTFROMZERO、FP_INT_TONEAREST之一。

unsigned int width

参数为unsigned int类型整数,表示无符号整数类型的宽度,例如:UINT_WIDTH。


返回值:

函数返回浮点形式表示的舍入得到的无符号整数值。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
/*函数ufromfpd32范例*/

#include <limits.h>
#include <math.h>
#include <stdio.h>

int main(void)
{
    #if __STDC_VERSION_MATH_H__ >= 202311L && defined(__STDC_IEC_60559_DFP__)
     printf("FP_INT_UPWARD:");
     printf(" %.2Hf\n", ufromfpd32(2.5df, FP_INT_UPWARD, UINT_WIDTH));
     printf("FP_INT_DOWNWARD:");
     printf(" %.2Hf\n", ufromfpd32(2.5df, FP_INT_DOWNWARD, UINT_WIDTH));
     printf("FP_INT_TOWARDZERO:");
     printf(" %.2Hf\n", ufromfpd32(2.5df, FP_INT_TOWARDZERO, UINT_WIDTH));
     printf("FP_INT_TONEAREST:");
     printf(" %.2Hf\n", ufromfpd32(2.5df, FP_INT_TONEAREST, UINT_WIDTH));
     printf("FP_INT_TONEARESTFROMZERO:");
     printf(" %.2Hf\n", ufromfpd32(2.5df, FP_INT_TONEARESTFROMZERO, UINT_WIDTH));
    #else
     puts("The implementation does not support ufromfpd32 function.");
    #endif

    return 0;
}


可能输出:

FP_INT_UPWARD: 3.00

FP_INT_DOWNWARD: 2.00

FP_INT_TOWARDZERO: 2.00

FP_INT_TONEAREST: 2.00

FP_INT_TONEARESTFROMZERO: 3.00

(注:编译时实现还未支持ufromfpd32函数。)


相关内容:
ufromfp 将double类型参数根据舍入方向舍入为无符号整数的函数。
ufromfpl 将long double类型参数根据舍入方向舍入为无符号整数的函数。
ufromfpf 将float类型参数根据舍入方向舍入为无符号整数的函数。
ufromfpd64 将_Decimal64类型参数根据舍入方向舍入为无符号整数的函数。
ufromfpd128 将_Decimal128类型参数根据舍入方向舍入为无符号整数的函数。


主要参考资料:

1、ISO/IEC 9899:2024