终止小数

inh*_*ler 1 c++ floating-point precision

#include<iostream>
#include<string>
#include<cstdlib>
using namespace std;

int main()
{
double a,b,res;

while(cin>>a>>b)
{
    res = a/b;

    if((res*b) == a)
        cout<<"Terminates"<<endl;
    else
        cout<<"Does not terminate"<<endl;
}

return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以,这是我的代码,看看a/b是否导致终止小数.一些输入正在生成正确的输出,如:

1/3:不会终止,

1/9:不终止,

1/7:不会终止,

22/7:不会终止,

1/2:终止.

除了应该显示的1/5 1/5 : Terminates,但是输出是:Does not terminates.

我知道C++浮点有很多问题,谷歌尝试但它就像一个谜题.

Pat*_*han 5

在您的情况下,有一种简单的方法可以询问比率是否在给定的基数中具有精确的终止表示.

第1步是将其降低到最低值.按其最高公因子划分顶部和底部.

现在只有分母很重要.如果其每个主要因子也是基数的主要因子,则该分数将在该基数中终止.5是素数因子10,因此1/5以十进制结束.5不是2的素因子,因此1/5不以二进制终止.