在C中简化二进制分数时的无限循环

时间:2015-07-02 01:43:48

标签: c linux binary infinite-loop fractions

我试图用这段代码来简化二进制分数,检查该值是否为偶数:

int is_even(floatlet value){
  if(value & 1) return 0;
  return 1;
}

这个while循环保持位移,直到值为奇数。

while(is_even(numerator) && is_even(denomExp)){
  numerator >>= 1;
  denomExp <<= 1;
}

while循环进行无限循环。我想知道为什么? 我们已经完成测试,is_even功能正常。谢谢!

1 个答案:

答案 0 :(得分:1)

你的循环不正确:你也应该将demonExp转移到右边。 它无限期地运行numerator=0和偶数denomExp

如果numeratordenomExp是整数类型,并且数字只是一小部分numerator/denomExp,则可以通过这种方式修复代码:

while (numerator && is_even(numerator) && is_even(denomExp)) {
    numerator >>= 1;
    denomExp >>= 1;
}

相反,如果denomExp是2除以分子的幂,你应该增加它,然后测试溢出:

while (numerator && is_even(numerator)) {
    numerator >>= 1;
    denomExp += 1;
}

您必须发布类型定义和语义以及相关的完整代码。