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

encodedecd32函数


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

描述:

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

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

十进制编码和二进制编码


该函数将*xptr转换为基于十进制编码的ISO/IEC 60559标准的_Decimal32编码,并将结果编码作为4元素数组(每个数组元素占用8个位。)存储到参数encptr指向的对象中。

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

该函数会保留*xptr的值,并且不会引发浮点异常。如果*xptr是非规范的,该函数可能会生成规范编码。


参数:
unsigned char encptr[restrict static 4]

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

const _Decimal32 * restrict xptr

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


返回值:

无。


范例:
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 
27 
28 
/*函数encodedecd32范例*/

#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;
        unsigned char arr[SIZE];
         
        encodedecd32(arr, &x);
        
        printf("Encoded bytes: 0X");
        for(size_t i=0; i<SIZE; i++)
        {
            printf("%02X ", arr[i]);
        }
        printf("\n");
    #else
        puts("The implementation does not support encodedecd32 function.");
    #endif

    return 0;
}

输出:

The implementation does not support encodedecd32 function.


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


主要参考资料:

1、ISO/IEC 9899:2024

2、ISO/IEC 60559:2020