我的代码是否可以安全地检查下溢

Will my code safely check for an underflow?

本文关键字:检查 下溢 安全 代码 是否 我的      更新时间:2023-10-16

我编写了以下C++代码来检查下溢。不确定这是否是一个好的做法。

#include <limits>
#include <iostream>
int main()
{
    float d = 1.e-29;
    std::cout<<"d: "<<d<<" underflow? "<<(d<std::numeric_limits<float>::min())<<std::endl;
    d = 1.e-59;
    std::cout<<"d: "<<d<<" underflow? "<<(d<std::numeric_limits<float>::min())<<std::endl;
}

打印输出为

d: 1e-29 underflow? 0
d: 0 underflow? 1

在变量赋值后,不能通过将其与标准限制进行比较来检查是否存在下溢或上溢

简单示例:

int v1 = INT_MAX;
int v2 = INT_MAX;
int v3 = v1 * v2;

表达式v1 * v2导致溢出。然而,CCD_ 2的值将仍然是有效的CCD_。

您必须在v1 * v2之前执行检查,以确定它是否会导致溢出。