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

iscanonical宏


概要:
#include <math.h>
int iscanonical(real-floating x);

描述:

对于大多数浮点值,在特定的浮点格式中只有一种二进制表示形式。某些浮点格式(特别是扩展精度格式以及某些特定硬件平台的实现。)可能存在多种形式表示同一数值;其中一种是规范的,而其它形式虽然可以表示相同的数值,但其二进制编码不符合规范。


该宏是函数式宏(function-like macro),判断参数x是否为规范(canonical)的表示形式。

如果参数x的表示形式宽于real-floating类型,将转换成real-floating类型;然后再根据real-floating类型进行判断。


参数:
real-floating x

参数x应为实数浮点类型表达式,例如:float、double、long double类型表达式。


返回值:

如果参数x具有规范的表示形式,该宏返回非0值。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
/*宏iscanonical范例*/

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

int main(void)
{
    #if defined(__STDC_VERSION_MATH_H__) && (__STDC_VERSION_MATH_H__ >= 202311L)
      printf("iscanonical(3.14): %d\n", iscanonical(3.14));
      printf("iscanonical(3.14F): %d\n", iscanonical(3.14F));
      printf("iscanonical(3.14L): %d\n", iscanonical(3.14L));
    #else
      puts("The implementation may not support iscanonical.");
    #endif

    return 0;
}

输出:

The implementation may not support iscanonical.


相关内容:
fpclassify 对参数按浮点类别进行分类的宏。
isinf 判断参数是否为无穷大的宏。
isnan 判断参数是否为非数值的宏。
isnormal 判断参数是否为规格化数的宏。


主要参考资料:

1、ISO/IEC 9899:2024