在 C 中简化二进制分数时的无限循环
Infinite loop when simplifying fractions in binary in C
我正在尝试使用这段代码来简化二进制分数,该代码检查值是否为偶数:
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 函数工作正常。谢谢!
您的循环不正确:您也应该将 demonExp
向右移动。
它无限期运行 numerator=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;
}
您必须 post 类型定义和语义以及相关的完整代码。
我正在尝试使用这段代码来简化二进制分数,该代码检查值是否为偶数:
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 函数工作正常。谢谢!
您的循环不正确:您也应该将 demonExp
向右移动。
它无限期运行 numerator=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;
}
您必须 post 类型定义和语义以及相关的完整代码。