首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C++:如何测试一个数字是否是10的幂?

C++:如何测试一个数字是否是10的幂?
EN

Stack Overflow用户
提问于 2010-03-31 17:13:31
回答 7查看 6.9K关注 0票数 19

我想测试一个数字是否是10的整数幂。我也许可以使用double xlog10,然后测试x == (int) x

编辑:实际上,我的解决方案不起作用,因为doubles可以很大,比int大得多,也可以很小,比如分数。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-03-31 19:42:50

到目前为止,查找表将是最快、最精确的方法;只有大约600个10的幂可以表示为双倍。您可以使用哈希表,或者如果表是从最小到最大排序的,您可以使用二进制chop快速搜索它。

这样做的好处是,当且仅当你的数字恰好是IEEE中最接近10的幂的倍数时,你才会得到一个“命中”。如果这不是你想要的,你需要更精确地知道你想要如何处理这样一个事实,即许多10的幂不能精确地表示为双精度。

构造表的最好方法可能是使用字符串->浮点转换;这样,您的库作者可能已经解决了如何以一种尽可能精确的方式进行转换的问题。

票数 23
EN

Stack Overflow用户

发布于 2010-03-31 17:17:12

你的解决方案听起来不错,但我会用容忍度代替确切的比较。

代码语言:javascript
复制
double exponent = log10(value);
double rounded = floor(exponent + 0.5);
if (fabs(exponent - rounded) < some_tolerance) {
    //Power of ten
}
票数 10
EN

Stack Overflow用户

发布于 2010-03-31 20:59:24

代码语言:javascript
复制
bool power_of_ten(double x) {
   if(x < 1.0 || x > 10E15) {
      warning("IEEE754 doubles can only precisely represent powers "
              "of ten between 1 and 10E15, answer will be approximate.");
   }
   double exponent;
   // power of ten if log10 of absolute value has no fractional part
   return !modf(log10(fabs(x)), &exponent);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2551657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档