C语言检测计算产生subnormal值的函数是什么?
											大家好!在《C Primer Plus》中,作者提到,浮点数的运算可能会产生下溢(underflow),如果精度丢失,就会产生低于正常值(subnormal)的计算结果。并说明了C语言提供了检查计算是否会产生subnormal值的函数。但并未说明是哪个函数。我查到https://cloud.
,按照这篇文章测试。如果运算产生了上溢和下溢,并未匹配到对应的宏。 程序代码:
程序代码:
#include <stdio.h>
#include <math.h>
#include <float.h>
#include <fenv.h>
#pragma STDC FENV_ACCESS ON
void show_fe_exceptions(void)
{
    int result;
    printf("exceptions raised:");
    if (result = fetestexcept(FE_DIVBYZERO))
    {
        printf(" FE_DIVBYZERO\n");
        printf("result = %d\n", result);
    }
    else if (result = fetestexcept(FE_INEXACT))
    {
        printf(" FE_INEXACT\n");
        printf("result = %d\n", result);
    }
    else if (result = fetestexcept(FE_INVALID))
    {
        printf(" FE_INVALID\n");
        printf("result = %d\n", result);
    }
    else if (result = fetestexcept(FE_OVERFLOW))
    {
        printf(" FE_OVERFLOW\n");
        printf("result = %d\n", result);
    }
    else if (result = fetestexcept(FE_UNDERFLOW))
    {
        printf(" FE_UNDERFLOW\n");
        printf("result = %d\n", result);
    }
    else
    {
        printf(" no above expections\n");
        printf("result = %d\n", result);
    }
    feclearexcept(FE_ALL_EXCEPT);
    printf("\n");
}
int main(void)
{
    printf("MATH_ERREXCEPT is %s\n\n",
        math_errhandling & MATH_ERREXCEPT ? "set" : "not set");
    
    float toobig = 3.4E38 * 100.0f;
    printf("toobig = %e\n", toobig);///< 未产生上述异常,输出inf
    show_fe_exceptions();
    float toosmall = 1.0 * 3.4E-65565;
    printf("toosmall = %e\n", toosmall);///< 未产生上述异常,输出0.000000e+00
    show_fe_exceptions();
    return 0;
}
请问这是为什么呢?C语言检测计算产生subnormal值的函数究竟是哪个呢?
[此贴子已经被作者于2021-5-4 18:54编辑过]



 
											





 
	    

 
	

