inhaler inhaler - 1 year ago 90
C++ Question

Terminating decimal

using namespace std;

int main()
double a,b,res;

res = a/b;

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

return 0;

So, here is my code to see if a/b results in terminating decimal or not. Some input is generating correct output, like:

1/3 : Does not terminates,

1/9 : Does not terminates,

1/7 : Does not terminates,

22/7 : Does not terminates,

1/2 : Terminates.

Except for 1/5 which should show:
1/5 : Terminates
, but the output is:
Does not terminates

I know there are many issues for C++ floating points,tried google but it's like a puzzle.

Answer Source

There is an easy way to ask whether a ratio has an exact, terminating representation in a given radix, in your case 10.

Step 1 is to reduce it to its lowest terms. Divide top and bottom by their highest common factor.

Now only the denominator matters. If every one of its prime factors is also a prime factor of the radix, the fraction will terminate in that radix. 5 is a prime factor of 10, so 1/5 terminates in decimal. 5 is not a prime factor of 2, so 1/5 does not terminate in binary.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download