-3

所以我有一个程序可以用不同的基数表示小数,并且由于它的性质,它有可能显示无限个小数位。但是,当我尝试以 2 为基数并输入 .258 时,它会给出 01000010000011000100100110111010010111100011010101 但即使我确定它是一个重复的小数,它也会停在那里。重要的是要注意,该程序不会存储数字,而是在获得单个数字后立即显示它们,然后立即忘记它们。这是代码:

#include <iostream>
#include <math.h>
using namespace std;
int main(int argc, const char * argv[])
{
    double a;
    double b;
    cout << "input base then input the decimal\n";
    cin >> a >> b;
    while (b) {
        b*=a;
        cout << int(b);
        b-=floor(b);
    }
}
4

1 回答 1

3

您的变量b是双精度浮点变量。您存储在其中的值是最接近 0.258 的可表示值。与所有二进制浮点值一样,该值具有终止的二进制扩展。毕竟,您将它存储在一个 64 位宽的变量中。

你的期望是不正确的。虽然存储的数字b可能具有重复的十进制表示,但二进制表示必须终止。

于 2013-03-28T23:56:37.483 回答