错误地相乘

时间:2013-03-28 23:52:04

标签: c++

所以我有一个程序在不同的基础上表示小数,并且由于其性质,有可能显示无数个小数位。然而,当我尝试基数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);
    }
}

1 个答案:

答案 0 :(得分:3)

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

您的期望不正确。虽然b中存储的数字可能包含重复的十进制表示,但二进制表示必须终止。