获得10的力量的最快方法

时间:2017-10-27 21:40:28

标签: java math pow

我将在这里使用Java作为示例,因为它可能完全取决于语言,但我通常对如何做到这一点感兴趣。
当然,最简单明了的方法就是:

Math.pow(10, x)

但据我所知,电力是一项相当昂贵的操作。因此我认为应该有更好的方法,因为它看起来很明显 - 我只需要在1之后的x零!

修改 是的,这可能是过早的优化。上下文是对小数点后n位的舍入操作,通常使用如下内容:

private final static int[] powersOf10 = {1, 10, 100, 1000, 10000};
public static double round(double number, int decimals) {
    if(decimals < 5)
        return Math.rint(number / powersOf10[decimals]) * powersOf10[decimals];
    double c = Math.pow(10, decimals);
    return Math.rint(number * c) / c;
}

这是我使用的当前舍入函数,你可以看到我已经使用了一个查找表来查找最常用的值,但我仍然很好奇是否有一些魔法或类似的东西来改善这一点。

2 个答案:

答案 0 :(得分:11)

最快的方法是

static final int[] POWERS_OF_10 = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000};
static int powerOfTen(int pow) {
  return POWERS_OF_10[pow];
}

...因为没有更高的10的幂适合int。对不起,如果你期待更酷的东西。

答案 1 :(得分:0)

这是我的解决方案:

template <typename T, enable_if_t<is_same_v<T, int>, int> = 0>
void qw(T t)  
{
  std::cout << "int " << endl;
}

template <typename T, enable_if_t<is_same_v<T, float>, int> = 0>
void qw(T t) 
{
   cout << "float" << endl;
}

对此我感到很高兴,三天前我开始学习Java,现在我很喜欢它!