gpt4 book ai didi

c++ - 是否可以在 C++ 中下溢浮点加法?

转载 作者:搜寻专家 更新时间:2023-10-31 01:00:32 25 4
gpt4 key购买 nike

我正在查看英特尔处理器手册,第 2A 卷,第 3.266-3.268 页,它指出 FADD 操作可能会产生 #U(下溢)异常。原因是结果太小而无法在 DST 中正确表示。

我想知道在使用 native 数据类型(float、double、long double)的 C++ 上加法下溢是否可能,或者数据类型的语言包装是否使加法操作在下溢方面是安全的。

最佳答案

如果你添加一个非常接近的正数和一个负数,产生一个denormal ,然后设置下溢标志(如果未屏蔽下溢异常)。英特尔文章链接 denormals and underflow .

示例代码(使用微软编译器):

    double a,b,c;
a = 2.2250738585072019e-308;
b = -2.2250738585072014e-308;
c = a + b; /* c is denormal */
printf("%28.16le %016llx\n", a, a);
printf("%28.16le %016llx\n", b, b);
printf("%28.16le %016llx\n", c, c);
if ( std::fpclassify( c ) == FP_SUBNORMAL ) printf("c is DENORMAL");

启用(取消屏蔽)下溢异常(Microsoft 编译器):

    short fcw; /* floating point control word - 16 bit */
/* enable underflow exception */
__asm{
fnstcw fcw
and fcw,0ffefh
fldcw fcw
}

关于c++ - 是否可以在 C++ 中下溢浮点加法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30912183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com