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

decodebind32函数


概要:
#include <math.h>
#ifdef __STDC_IEC_60559_DFP__
    void decodebind32(_Decimal32 * restrict xptr, 
          const unsigned char encptr[restrict static 4]);
#endif 

描述:

ISO/IEC 60559标准规定了两种不同方案,用于在十进制浮点数的对象表示中编码有效数字:① 基于十进制编码(将3个十进制数字压缩为10个位。);② 基于二进制编码(作为二进制整数。)。同一值使用不同编码方案,字节表示不同;但解码后可以得到相同值。实现可以采用任一编码方案。encodedecdN、decodedecdN、encodebindN、decodebindN等函数提供了采用指定编码方案的外部十进制数据与实现对应的十进制浮点类型之间的转换。

以_Decimal32类型浮点数1.25df为例,两种编码方案的对照关系如下图所示:

十进制编码和二进制编码


该函数将参数encptr指向的4元素数组(每个数组元素占8个位,采用基于二进制编码的编码方案。)解释为ISO/IEC 60559标准的_Decimal32编码。

数组中字节顺序遵循宏__STDC_ENDIAN_NATIVE__指定的字节序。

该函数将指定代码转换成_Decimal32类型浮点值,并将转换结果存入参数xptr指向的对象中。

该函数会保留编码值,并且不会引发浮点异常。如果编码是非规范的,该函数可能会生成规范表示(canonical representation)。


参数:
_Decimal32 * restrict xptr

参数是指向_Decimal32类型对象的指针,且是访问指向对象的唯一方式。

const unsigned char encptr[restrict static 4]

参数是指向const unsigned char类型对象的指针,指向的数组至少包含4个数组元素。


返回值:

无。


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

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

#define SIZE 4

int main(void)
{
    #if __STDC_VERSION_MATH_H__ >= 202311L && defined(__STDC_IEC_60559_DFP__)
        const _Decimal32 x = 1.25df;
        _Decimal32 temp = x;
        unsigned char arr[SIZE];
         
        encodebind32(arr, &temp);
        decodebind32(&temp, arr);
        printf("temp = %.2Hf\n", temp);
    #else
        puts("The implementation does not support decodebind32 function.");
    #endif

    return 0;
}

输出:

The implementation does not support decodebind32 function.


相关内容:
decodebind64 _Decimal64类型的将参数指向对象解释为有效数字基于二进制编码的编码的函数。
decodebind128 _Decimal128类型的将参数指向对象解释为有效数字基于二进制编码的编码的函数。
encodebind32 _Decimal32类型的将参数指向对象转换为有效数字基于二进制编码的编码的函数。


主要参考资料:

1、ISO/IEC 9899:2024

2、ISO/IEC 60559:2020