是否需要缩小C语言中溢出检查代码的帮助?

时间:2019-07-12 07:51:54

标签: c overflow

在缩小以下溢出检查代码方面,我需要您的帮助:

#include <limits.h>

int main(void)
{
    int value;
    value = 3;
    #define FACTOR (2.557)  // may also be < 1, decimal (float) value

    if(FACTOR > -1 && FACTOR < 1)
    {
        if(value >= 0)
        {
            value = value * FACTOR + 0.5; // to adjust upward
        }
        else
        {
            value = value * FACTOR - 0.5; // to adjust downward
        }
    }
    else
    {
        if (value > INT_MAX/FACTOR)  // here it must be guaranteed that absolute value of FACTOR is less than 1 and not 0
        {
            value = INT_MAX;
        }
        else if( value < INT_MIN/FACTOR)  // here it must be guaranteed that absolute value of FACTOR is less than 1 and not 0
        {
            value = INT_MIN;
        }
        else
        {
            if(value >= 0)
            {
                value = value * FACTOR + 0.5; // to adjust upward
            }
            else
            {
                value = value * FACTOR - 0.5; // to adjust downward
            }
        }
    }
}

我不喜欢的是if(value >= 0)部分的两次出现。 是否可以避免这种重复发生(无需创建额外的功能)。 因此,是否有一种优雅的方法可以最小化上述溢出检测,例如通过巧妙地重新排列if语句?

非常感谢您的提示。

0 个答案:

没有答案