【发布时间】:2014-09-09 12:56:24
【问题描述】:
这是一个小程序,用于计算“从”“到”两个数字之间的“间隔”大小的差距。然后我计算“大小”(间隙数)并将其存储在一个 int 变量中,有时给我一个较小的值。
代码如下:
double from=0, to=1, interval=0.1;
cout << "WORKING WITH VARIABLES: " << endl;
double operation = (to-from)/interval +1;
cout << "Size: " << operation << endl;
int size = operation;
cout << "Size after storing: " << size << endl << endl;
cout << "WORKING WITHOUT VARIABLES: " << endl;
cout << "Size: " << (to-from)/interval +1 << endl;
size = (to-from)/interval +1;
cout << "Size after storing: " << size << endl << endl;
问题似乎在于它的存储间隔。如果 interval=1 一切都很好,但如果是 0.1,如在示例中它给我 10 而不是 11 在第二种情况的“存储后的大小”。
我发现它适用于区间=0.25 (2^-2)。
编辑:我没有发现它在第一种情况下会失败,在第二种情况下总是会失败。
【问题讨论】:
-
我认为这只是由于
double对象的表示。例如,从0.999999转换为int将是0.0,但从1.000000001转换为int将是1.0。 -
你用的是什么编译器?我用 xcode (clang) 和 g++ 得到了正确的结果
-
您是否尝试调试并查看数字在哪个位置出错?检查 (to-from)/interval 操作返回什么。
-
@IAmJohn 我正在使用 MinGW32 g++
-
@PiotrChojnacki 操作返回正确的值,在第一种情况下检查。
标签: c++ floating-point integer