在缩小以下溢出检查代码方面,我需要您的帮助:
#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语句?
非常感谢您的提示。