我想测试一个数字是否是10的整数幂。我也许可以使用double x
的log10
,然后测试x == (int) x
编辑:实际上,我的解决方案不起作用,因为doubles可以很大,比int大得多,也可以很小,比如分数。
发布于 2010-03-31 19:42:50
到目前为止,查找表将是最快、最精确的方法;只有大约600个10的幂可以表示为双倍。您可以使用哈希表,或者如果表是从最小到最大排序的,您可以使用二进制chop快速搜索它。
这样做的好处是,当且仅当你的数字恰好是IEEE中最接近10的幂的倍数时,你才会得到一个“命中”。如果这不是你想要的,你需要更精确地知道你想要如何处理这样一个事实,即许多10的幂不能精确地表示为双精度。
构造表的最好方法可能是使用字符串->浮点转换;这样,您的库作者可能已经解决了如何以一种尽可能精确的方式进行转换的问题。
发布于 2010-03-31 17:17:12
你的解决方案听起来不错,但我会用容忍度代替确切的比较。
double exponent = log10(value);
double rounded = floor(exponent + 0.5);
if (fabs(exponent - rounded) < some_tolerance) {
//Power of ten
}
发布于 2010-03-31 20:59:24
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);
}
https://stackoverflow.com/questions/2551657
复制相似问题