Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C中二元分数化简时的无限循环_C_Linux_Binary_Infinite Loop_Fractions - Fatal编程技术网

C中二元分数化简时的无限循环

C中二元分数化简时的无限循环,c,linux,binary,infinite-loop,fractions,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循环是无限循环。我想知道

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

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_-偶数函数运行良好。谢谢

您的循环不正确:您也应该将demonExp移到右侧。 它无限期地为分子=0和偶数denomExp运行

如果numerator和denomExp是整数类型,并且数字只是一个分数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;
}

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

什么是floatlet?分子和分母的类型是什么?0是偶数,0/2和0*2也是偶数。b您没有费心显示分子和denomExp的声明或值。。。如果没有这些,你怎么可能期望有人回答你的问题呢?这是一个8位浮点数的纯浮点表示。分子和分母只是整数。如果你关心速度:定义是_evenx!x&1我不知道你所说的8位浮点数的最小浮点表示是什么意思。。。你的均匀度测试可能不正确。如果denomExp是一个指数,那么他们应该递减它,而不是移动它。@Cameron Skaggs:同意!发布完整的类型定义和完整的代码!你应该增加它-哦,是的,这就是我的意思。:-我不是Cameron Skaggs。谢谢你的帮助,在取指数并增加它而不是移动它之后,循环停止了。我感谢你的帮助!