C用于整数除法,具有明确定义的舍入策略

前端之家收集整理的这篇文章主要介绍了C用于整数除法,具有明确定义的舍入策略前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想要一些C语言,让我用指定的舍入行为进行有效的整数除法,如下所示:
div_down(-4,3)        ==> -2
div_up(4,3)           ==> 2
div_to_zero(-4,3)     ==> -1
div_to_nearest(5,3)   ==> 2

我希望它能够在编译时检测目标机器的行为并生成适当的最佳实现.类似于模数的东西也会很好,在编译时抽象出负操作数的未定义行为.

这存在吗?

如果没有,有什么好办法呢?我可以想到几种可能的方法

>尝试将它们实现为静态优化的单个表达式
>使用常量表达式来检测目标行为,并从多个实现中进行选择,使用模板进行选择(但具体如何?)

解决方法

这是我到目前为止所得到的,前提条件d>它们似乎都有效,但它们可以简化吗?
int div_down(int n,int d) {
  if (n < 0) {
    return -((d - n - 1) / d);
  } else {
    return n / d;
  }
}

int div_up(int n,int d) {
  if (n < 0) {
    return -(-n / d);
  } else {
    return (n + d - 1) / d;
  }
}

int div_to_zero(int n,int d) {
  return n / d;
}

int div_to_nearest(int n,int d) {
  if (n < 0) {
    return (n - d/2 + 1) / d;
  } else {
    return (n + d/2) / d;
  }
}

猜你在找的C&C++相关文章