I want to test if a number double x
is an integer power of 10. I could perhaps use cmath\'s log10
and then test if x == (int) x
?
<
I am afraid you're in for a world of hurt. There is no way to cast down a very large or very small floating point number to a BigInt
class because you lost precision when using the small floating point number.
For example float
only has 6 digits of precision. So if you represent 109 as a float
chances are it will be converted back as 1 000 000 145
or something like that: nothing guarantees what the last digits will be, they are off the precision.
You can of course use a much more precise representation, like double
which has 15 digits of precision. So normally you should be able to represent integers from 0 to 1014 faithfully.
Finally some platforms may have a long long
type with an ever greater precision.
But anyway, as soon as your value exceed the number of digits available to be converted back to an integer without loss... you can't test it for being a power of ten.
If you really need this precision, my suggestion is not to use a floating point number. There are mathematical libraries available with BigInt
implementations or you can roll your own (though efficiency is difficult to achieve).