首页 > 试题广场 >

下面程序的输出结果是( ) #in...

[单选题]
下面程序的输出结果是()
#include <stdio.h>
int main() { 
    int i, n = 0;
    float x = 1, y1 = 2.1 / 1.9, y2 = 1.9 / 2.1;
    for ( i = 1; i < 22; i++)
        x = x * y1;
    while ( x != 1.0 ) {
        x = x * y2; n++;    
    }
    printf( "%d\n", n );
    return 0; 
}
  • 21
  • 22
  • 程序无限循环
  • 运行时崩溃
浮点类型不能精确相等
发表于 2019-08-30 18:43:23 回复(1)
开开心心算了一下n的值。然后记一下这个坑。哈哈哈
发表于 2020-03-14 17:58:17 回复(2)

先来看一个简单的例子:

#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
    float a = 1.00000001;
    cout << (a == 1.0) << endl; //1
    return 0;
}

上述代码再gcc编译器编译通过。gcc编译器表示单精度浮点数是以八位表示指数部分的(包括指数的符号),指数部分超过这个范围就不能精确表示一个单精度浮点数。这就说明浮点类型数据是不能精确比较的。

发表于 2019-10-12 11:52:50 回复(0)
浮点类型的数据 比较时可以用和0.1相减小于某个特定的值
发表于 2019-09-17 00:06:46 回复(0)
好题
编辑于 2023-12-17 22:53:02 回复(0)
快来敲醒我,不能理解
发表于 2023-10-12 14:18:13 回复(0)
这道题不是太理解
发表于 2022-12-31 12:09:49 回复(0)
无线循环是非线性循环吗
发表于 2021-09-30 09:41:16 回复(0)